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

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

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

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

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

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

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

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

【问题讨论】:

标签: ios ios6 uicollectionview uicollectionviewlayout


【解决方案1】:

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

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

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-25
    • 1970-01-01
    • 1970-01-01
    • 2023-03-26
    相关资源
    最近更新 更多