Swift 添加 UICollectionView 代替导航栏标题
Posted
技术标签:
【中文标题】Swift 添加 UICollectionView 代替导航栏标题【英文标题】:Swift adding a UICollectionView in place of the navigation bar title 【发布时间】:2018-05-08 01:45:48 【问题描述】:我正在尝试将 UICollectionView 添加到导航栏以代替导航标题,就像在 ios 中的本机消息应用程序中所做的那样。据我所知,这是:
let navigationBar = UINavigationBar()
var collectionview: UICollectionView!
let layout: UICollectionViewFlowLayout = UICollectionViewFlowLayout()
layout.sectionInset = UIEdgeInsets(top: 0, left: 0, bottom: 0, right: 0)
layout.itemSize = CGSize(width: navigationBar.frame.width, height: navigationBar.frame.height)
collectionview = UICollectionView(frame: navigationBar.frame, collectionViewLayout: layout)
collectionview.dataSource = self
collectionview.delegate = self
collectionview.register(UserImagesCollectionViewCell.self, forCellWithReuseIdentifier: "userCell")
collectionview.showsVerticalScrollIndicator = false
collectionview.backgroundColor = .red
let navigationItem = UINavigationItem()
navigationItem.title = ""
navigationItem.titleView = collectionview
navigationBar.items = [navigationItem]
此代码运行时没有任何错误,但在视图控制器上不显示任何内容。我在这里缺少一些东西,我不能指望它。有什么帮助吗?
编辑: 在 Mike 的回答的帮助下,这是我在导航栏中使用自定义单元格 xib 文件创建 uicollectionview 的代码。
func setupCustomCollectionView()
if let navigationBar = self.navigationController?.navigationBar
let layout: UICollectionViewFlowLayout = UICollectionViewFlowLayout()
layout.sectionInset = UIEdgeInsets(top: 0, left: 0, bottom: 0, right: 0)
layout.itemSize = CGSize(width: navigationBar.frame.width / 4, height: navigationBar.frame.height)
collectionview = UICollectionView(frame: navigationBar.frame, collectionViewLayout: layout)
collectionview.dataSource = self
collectionview.delegate = self
let nibCell = UINib(nibName: "UserImagesCollectionViewCell", bundle: nil)
collectionview.register(nibCell, forCellWithReuseIdentifier: "userCell")
collectionview.showsVerticalScrollIndicator = false
collectionview.backgroundColor = .red
self.navigationController?.navigationBar.topItem?.titleView = collectionview
【问题讨论】:
您想将标题替换为“就像在 iOS 的原生消息应用中所做的那样”?请张贴这意味着什么的屏幕截图。 【参考方案1】:我能够使用这个来显示集合视图:
self.navigationController?.navigationBar.topItem?.titleView = collectionview
...而不是创建导航项的最后四行代码。
我注意到因为layout.itemSize
被设置为占据整个导航栏,所以cellForItemAt
方法只被调用了一次,即使我在numberOfItemsInSection
中指定了一个更大的数字。
通过将layout.itemSize
更改为更小的值,cellForItemAt
被多次调用。
【讨论】:
谢谢迈克。对于带有 xib 文件的自定义集合单元,我不得不稍微修改代码。我已经更新了我的问题以包含该代码以防其他人需要它。以上是关于Swift 添加 UICollectionView 代替导航栏标题的主要内容,如果未能解决你的问题,请参考以下文章
Swift:Tumblr 是不是在 UIScrollView 中添加了 UICollectionView?
如何在 UICollectionView、Swift 5、Xcode 的行下添加行
在 Swift 中以编程方式在 UITableViewCell 中创建一个 UICollectionView
UICollectionview 将数据追加到数组 Swift