我正在尝试将UICollectionView添加到导航栏以代替导航标题,就像在iOS中的本机Messages应用程序中所做的那样。就我而言:
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
}
}
答案 0 :(得分:3)
我能够使用以下方式显示集合视图:
self.navigationController?.navigationBar.topItem?.titleView = collectionview
...而不是创建导航项的最后四行代码。
我注意到因为layout.itemSize
设置为占用整个导航栏,cellForItemAt
方法只调用一次,即使我在numberOfItemsInSection
中指定了更大的数字。
通过将layout.itemSize
更改为较小的值,cellForItemAt
被多次调用。