如何将整个标题视图设置为 UICollectionView?

Posted

技术标签:

【中文标题】如何将整个标题视图设置为 UICollectionView?【英文标题】:How can I set the entire header view to UICollectionView? 【发布时间】:2013-01-25 05:36:11 【问题描述】:

我想将标题设置为集合视图,就像 UITableViewController 的 setTableHeader 一样。

我找到了在集合视图上设置每个部分的标题的方法,但是我找不到如何设置整个标题的标题视图。

Apple 对 UICollectionViewLayout 的引用说“补充视图呈现数据但与单元格不同。与单元格不同,补充视图不能由用户选择。相反,您可以使用补充视图来实现给定部分的页眉和页脚视图或对于整个集合视图。补充视图是可选的,它们的使用和放置由布局对象定义。”,但我不知道如何实现整个集合视图的标题视图。

我试图通过只在第一部分创建一个节标题视图矩形来实现这一点,但它与 tableHeader 的那个不同。

在表格视图中,如果我将内容偏移量设置在标题下方,内容大小会自动扩展,因此尽管存在一些元素,但标题是隐藏的。

但是在集合视图中,只有当存在足够多的元素可以滚动时,修改内容偏移才能正常工作。

我尝试在存在少量元素时动态扩展内容大小,但似乎效果不佳...

【问题讨论】:

How to make Supplementary View float in UICollectionView as Section Headers do in UITableView plain style 的可能重复项 @staticVoidMan 这不是重复的。请仔细阅读问题。 【参考方案1】:

我使用自定义布局实现了这一点,并在每个滚动事件上重新定位标题。从继承 UICollectionViewLayout 开始,网上有很多教程,这是一个很好的:http://markpospesel.wordpress.com/2012/10/25/fixing-circlelayout/

然后诀窍是始终将YES 返回到shouldInvalidateLayoutForBoundsChange:,并在prepareLayout 中根据集合视图xOffset 和yOffset 重新定位(即更改layoutAttributes 的框架)标头。

使用 NSIndexPath 0-0 的补充视图。

layoutAttributesForElementsInRect: 将在每一帧上被调用,因此如果您的集合视图中有很多项目,则需要缓存结果,以免影响性能。除了那个标题之外,所有属性都应该保持不变。

资料来源:我花了 1 个月的时间研究这个特定的主题。

【讨论】:

以上是关于如何将整个标题视图设置为 UICollectionView?的主要内容,如果未能解决你的问题,请参考以下文章

如何将整个标题视图设置为 UICollectionView?

如何在 iOS swift 中的 ARSCNView 中显示 uicollection 视图

Table Cell 中的 UICollection 视图在 Swift 3 中不显示图像

UICollectionView 和一个视图控制器中的其他视图

滑动时如何使用左右移动的项目制作 UICollectionview?

导航控制器如何弹出整个堆栈,包括根