将 UICollectionView 添加到导航栏

2023-11-30

我正在尝试将 UICollectionView 作为子视图添加到我的导航栏。

[self.navigationController.view addSubview:self.hotspotCollectionView];

它似乎工作正常,但覆盖了后退按钮,请参阅随附的屏幕截图。是否有办法缩进 collectionView 以便后退按钮正确可见?还有没有办法增加导航栏的高度,以便我可以在 CollectionView 中使用更大的缩略图?

我正在使用 XCode 7 和 iOS9。

CollectionView in NavigationBar


我能够实现这个简单的例子

screenshot

enter image description here by using a subclass of UINavigationBar and setting a collection view to the view controller's navigationItem.titleView


#import <UIKit/UIKit.h>

@interface NavigationBar : UINavigationBar

@end

#import "NavigationBar.h"

@implementation NavigationBar

- (CGSize)sizeThatFits:(CGSize)size
{
    return CGSizeMake(self.superview.bounds.size.width, 80);
}

-(void)setFrame:(CGRect)frame {
    CGRect f = frame;
    f.size.height = 80;
    [super setFrame:f];
}

@end

#import <UIKit/UIKit.h>

@interface ViewController : UIViewController

@end

#import "ViewController.h"
#import "CollectionViewCell.h"

@interface ViewController ()<UICollectionViewDelegate, UICollectionViewDataSource>
@property (nonatomic, weak) UICollectionView *collectionView;
@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    UICollectionViewFlowLayout *layout=[[UICollectionViewFlowLayout alloc] init];

    UICollectionView *collectionView = [[UICollectionView alloc] initWithFrame:CGRectMake(0, 0, 300, 80) collectionViewLayout:layout];
    collectionView.backgroundColor = [UIColor clearColor];
    self.navigationItem.titleView = collectionView;
    [collectionView registerClass:[CollectionViewCell class] forCellWithReuseIdentifier:@"cell"];
    collectionView.delegate = self;
    collectionView.dataSource = self;
}


-(NSInteger)numberOfSectionsInCollectionView:(UICollectionView *)collectionView
{
    return 1;
}

-(NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section
{
    return 5;
}

-(UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath
{
    CollectionViewCell *cell = (CollectionViewCell *)[collectionView dequeueReusableCellWithReuseIdentifier:@"cell" forIndexPath:indexPath];
    cell.backgroundColor = [UIColor orangeColor];
    return cell;
}
- (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath
{
    return CGSizeMake(50, 50);
}

@end

我在界面生成器中设置了自定义导航栏

screenshot


免责声明1:我不能保证这是一个面向未来的解决方案或在任何情况下都有效。我没有用自动布局或旋转之类的东西来测试它。

免责声明2:我个人会独立于视图控制器实现任何数据源/委托。对于表视图和集合视图,我使用我自己生长的OFAPopulator.


这是一个示例代码:gitlab.com/vikingosegundo/collectionview-in-navigationbar/tree/... 其中仍然有一些 UI 怪癖。但这或许是意料之中的。我猜苹果只是没有考虑我们改变高度。实际上,我从未见过导航栏具有不同高度的应用程序。但代码回答了你的问题。给予它更多的爱,它可能对你有用。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

将 UICollectionView 添加到导航栏 的相关文章

  • 在 iOS 中发送音频文件和 JSON 字符串

    我正在尝试将音频文件和 JSON 字符串发送到 PHP 服务器 使用以下代码将发送 JSON 但文件到达时为空 如果我将 JSON 块放在音频块下方 文件将完全到达 但 JSON 为空 有什么想法吗 void sendFile NSStri
  • Swift - 我可能已经删除了 Apple Swift Packages 集合

    我对 swift 和 XCode 很陌生 昨天我正在开发一个项目 想尝试一下某人制作的自定义日期选择器 所以我转到 添加包 并粘贴 GitHub 链接并添加它 我已经在我的项目中添加了一个名为 KeychainAccess 的不同包 方式
  • 在 Swift 中有条件导入基于 iOS 版本的框架(如 Speech)?

    有没有办法有条件地导入框架Swift基于运行时 iOS 版本 特别是 我有一个部署目标为的应用程序iOS 8 我想使用新的Apple Speech应用程序中的框架 如果在运行时可用 我知道 available iOS 10 代码部分的指令
  • iOS 和 Firebase 自动续订订阅

    我的问题 我很难找到一种使用 Firebase 在 iOS 中安全管理自动续订订阅的方法 购买流程 User1 purchases a subscription 使用订阅标识符更新 Firebase 上 User1 的帐户 用于解锁内容 存
  • 在 iOS 上构建 WebRtc

    我按照以下说明成功地在 MAC 上构建了 WebRTC http www webrtc org reference getting started http www webrtc org reference getting started
  • iPhone 核心数据:无法找到 NSManagedObjectModel

    我使用 Apple 的 CoreDataBooks 示例项目作为核心数据的学习辅助工具 我修改了应用程序 以便在加载应用程序时我首先显示菜单页面 而不是图书表视图 RootViewController 我做了以下事情 我在界面生成器中创建了
  • CSS 安全区域属性在 iPhone X 上不起作用

    就我而言 我正在 iPhone X 上运行一个 Web 应用程序 我尝试在顶部添加一个填充 以使用 Webkit 的安全区域 css 属性将我的身体推到安全区域padding top constant safe area inset top
  • iOS9 Sprite 套件问题

    一切都很顺利 直到我升级到 xCode 7 和 iOS 9 我当前的项目是一个 2D 平台游戏 自从升级以来 我就陷入了我们许多人似乎都面临的精灵套件错误 错误的困扰 我的问题是 每次游戏在模拟器或设备上运行时 所有精灵的 zPositio
  • 如何在 iOS 7 中刷新 UICollectionViewCell?

    我正在尝试在 Xcode 5 中开发我的应用程序并在 iOS 7 环境下调试它 我有一个自定义的 UICollectionViewLayoutAttributes 我打算在长按 UICollectionViewCell 后执行一些操作 因此
  • 我的 iPhone 6 获取 iPhone 5 媒体查询

    我不明白这里发生了什么事 我在 CSS 媒体查询中专门针对 iphone 5 media only screen and min device width 320px and max device width 568px some div
  • 如何获得 UICollectionView 的矩形

    我想在 UICollectionView 中找到节标题的框架 我对 UITableView 也有类似的情况 为此 我能够通过执行以下操作来获得其正确性 CGRect rect self tableView rectForHeaderInSe
  • 如何在复杂的层次结构中上下同步 CALayer 和 UIView 动画

    See 如何在整个层次结构中管理 CALayer 动画 https stackoverflow com questions 26917908 how to manage calayer animations throughout a hie
  • -[_SwiftValueencodeWithCoder:]:无法识别的选择器发送到实例

    尝试使用 NSCoder 时出现错误 玩家 swift class Player NSObject NSCoding private var playerName String private var playerScore Int pri
  • 为什么 xcode IDE 认为 `friend` 是保留字

    我一直在开发一个个人项目 并在我创建的新类中包含以下代码 property readonly getter isFriend BOOL friend 它似乎没有任何问题 当我构建它时 它可以编译得很好 但是当我们在xcode IDE看起来像
  • 块如何捕获其封闭范围之外的变量?

    我知道 Objective C 块可以捕获并设置其封闭范围之外的变量值 它是如何做到的 它实际上相当简单 并在 Clang 的块实现规范中进行了描述 在 导入变量 http clang llvm org docs Block ABI App
  • 在 UIScrollView 中禁用 2 根手指滚动

    我想在我的应用程序中禁用两指滚动UIScrollView 我对其进行了子类化 并使用以下代码调整了其内置手势识别器 for UIGestureRecognizer mgestureRecognizer in scroller gesture
  • 在 OSX 上检测 Objective C 或 C++ 中的文件夹访问(如 fs_usage 命令)

    我正在 OSX 上开发实时病毒扫描程序 OSX 的命令行命令fs usage可以通过以下方式确定文件夹访问权限 并且只能以 root 用户身份运行 fs usage w f pathname grep Users Documents Use
  • ios swift 如何将默认语言设置为阿拉伯语?

    我正在开发一个有两种语言的应用程序 即英语和阿拉伯语 我用英语编写了该应用程序 然后用阿拉伯语本地化了该应用程序 更改语言时需要重新启动应用程序 我唯一的问题是 第一次安装应用程序时如何将默认语言设置为阿拉伯语 我尝试在编辑方案部分将语言设
  • 在启动屏幕中执行代码已更新

    在原始启动屏幕中执行代码 https stackoverflow com questions 27642016 execute code in launch screen 现在默认的LaunchScreenXcode 项目中的文件已更改为
  • 如何在 Swift 中将所有 iOS 设备的标签水平居中

    我不知道如何使标签在图像视图中水平居中 标签说 You ve been here What would you rate us 我想要What would you rate us属于 You ve been here 我试图完成此操作的方法

随机推荐

  • 如何绕过权限被拒绝错误?

    以下示例将点形状文件写入光盘 但是 当脚本尝试将 shapefile 写入 C 时 我收到错误 我可以写入外部硬盘 G 以下是我在 R 中收到的错误 文件错误 out name wb 无法打开连接 另外 警告消息 在文件 out name
  • 有条件地选择多个(相邻)行

    我想返回符合特定条件的行 我可以对单行执行此操作 但我需要对多行组合执行此操作 例如 浅绿色 符合 XYZ 为正且 总计 gt 10 的条件 而 红色 则不然 当我组合相邻的一行或多行时 它确实 gt 深绿色 我可以实现遍历所有行而不返回重
  • 为什么当 Tomcat 加载和读取 beans.xml 时 Spring AOP XML 模式没有正确加载

    我正在尝试使用Spring 基于模式的 AOP 支持在 Eclipse 中 尝试在 Tomcat 中加载配置时出现错误 Eclipse 中没有错误 并且 aop 命名空间的自动完成功能正常工作 但是当我尝试将项目加载到 Eclipse 中时
  • 如何通过互联网连接TFS

    我正在团队环境中开发一个大型应用程序 我们使用 Team Foundation Server 来通过 VS2010 控制源代码 我们使用 LAN 连接 TFS 这在小型办公室中效果很好 但现在我们需要通过 Internet 连接 TFS 实
  • 如何重写 ParsePushBroadcastReceiver 的 onPushReceive() ?

    我正在使用 Parse com 的推送通知服务 根据doc 覆盖 onPushReceive 以触发 静默 后台操作 推动 我找到了onPushOpen 的源代码here 但现在我必须重写 onPushReceive 来自定义声音和振动的行
  • Spark 中 addJar() 方法有什么用?

    在Spark作业中 我不知道如何导入和使用方法共享的jarSparkContext addJar 似乎这种方法能够将 jar 移动到集群中其他节点可以访问的某个位置 但我不知道如何导入它们 这是一个例子 package utils publ
  • 如何使用 Beautiful Soup 查找具有特定文本的标签?

    怎么找text I am looking for在以下 HTML 中 标有换行符 n tr td class pos n Some text n br n strong some value strong n td tr tr td cla
  • Scala:在编译时验证类参数不是instanceOf特征

    在编译时 我想验证类参数不是特定特征 T 的实例 我知道如何在运行时使用require or a case match但想知道如何在编译时完成此操作以防止用户提供某种类型的对象混合 我研究过 scala 宏 反射 但无法完全理解它 trai
  • 用户切换浏览器选项卡时的事件

    我正在寻找一个每当用户从页面切换到另一个选项卡时就会触发的事件 以及当用户再次切换回该选项卡时触发的另一个事件 window onblur and window onfocus 似乎无法正常工作跨所有浏览器 我可以查看代理来合成此事件吗 您
  • 一些字符在 POST 期间编码,而另一些则没有

    TL DR 代码点火器 Security类直接操作您的全局变量 例如 POST它发现file and file 是一种威胁 因此它对其进行 HTML 编码 config php from my apps folder is the culp
  • 从对象中原生提取属性

    I use underscore js从对象中提取属性的库 是否有更原生的 JS 方法来完成相同的任务 var fullObject name Jack age 39 device tablet team Red const name de
  • 将 JPG 图像添加到 folium 弹出窗口

    我尝试将图像添加到 folium 弹出窗口 但失败了 我使用python 2 7版本和folium 0 50版本 实际上 我遵循了其他线程中提到的页面 但它仍然不起作用 http nbviewer jupyter org gist ocef
  • 许多:“require”:升级 ruby​​/rails 后无法加载此类文件 - “gem_name”(LoadError)

    在我将 Rails 从 4 1 升级并将 ruby 从 2 0 升级到 2 1 后 当我尝试启动 Rails 时 遇到了一些负载问题 我的许多宝石都抛出这样的错误 Users nk rvm gems ruby 2 1 3 au rails4
  • 获取导入模块的文件路径

    我正在为我的控制器编写一个类装饰器 看起来像 export function Controller
  • 如何使用 Jackson AnnotationIntrospector 有条件地忽略属性

    我想创建一个注释以使 Jackson 忽略带注释的字段 除非设置了特定的跟踪级别 public class A IgnoreLevel Debug String str1 IgnoreLevel Info String str2 或者 如果
  • 如何替换字符串中所有出现的字符?

    将所有出现的字符替换为另一个字符的有效方法是什么std string std string不包含此类功能 但您可以单独使用replace函数来自algorithm header include
  • 在散景中在线性和对数刻度之间切换

    我怎样才能重新生成这个例子在线性和对数刻度之间切换 背景 我是 Matplotlib 的长期用户 最近是 Bokeh 用户 我开始使用 Bokeh 的主要原因之一是它提供的交互性 其中很大一部分是能够在图中的线性和对数刻度之间切换 这是我日
  • Apache HttpComponents:org.apache.http.client.ClientProtocolException

    所以我在java中使用apache HttpComponents来处理http请求 现在我想重用DefaultHttpClient 根据这个例子应该有什么可能 http wiki apache org HttpComponents Quic
  • 访问 HTML 服务表单对象

    我正在努力通过https developers google com apps script guides html communication尝试提交包含从谷歌工作表加载的信息的表单 在客户端 我有 很大程度上基于文章中的表单示例
  • 将 UICollectionView 添加到导航栏

    我正在尝试将 UICollectionView 作为子视图添加到我的导航栏 self navigationController view addSubview self hotspotCollectionView 它似乎工作正常 但覆盖了后