如何为UICollectionView创建"粘性"页脚?

tob*_*pwn 7 ios ios6 uicollectionview uicollectionreusableview

提供页脚的最佳方法是什么UICollectionView"粘贴"到给定页面上的屏幕底部?假设UICollectionView全屏并且只有一个部分.

目前我正在提供一个UICollectionReusableView对象collectionView:viewForSupplementaryElementOfKind:atIndexPath:,但是(正如人们所预期的那样)当我的收藏内容超出此屏幕的界限时,页脚会被推离屏幕.

我猜测关键是装饰视图 - 但我找不到任何关于这些工作方式的良好代码(非IB)示例,而且我认为Apple的文档在这个特定主题上不清楚.

更新:装饰视图

在构建和试验装饰视图(使用本教程)之后,我遇到了一些限制 - 即装饰视图对象和UICollectionViewController控制器对象之间实际上没有任何回调(装饰视图UICollectionViewLayout对象管理,而不是UICollectionViewController宾语).苹果公司认为装饰视图仅限于视觉装饰而非数据驱动(尽管你明显可以解决这个问题).

所以,"正确"的解决方案仍然无法解决,但与此同时,我只是创建了一个静态UIView对象,而我只是从我的UICollectionViewController对象中管理它.它工作正常,但感觉不对.

更新:粘性标题

在过去的几个月里,我在各个项目中处理过类似的问题,并且最近找到了粘性HEADERS的解决方案.我认为这同样适用于页脚,但我还没有测试过.

有关标题的详细信息:

如何在UICollectionView中将Supplementary View float作为Section Headers在UITableView普通样式中进行

实施非常繁重,但在大多数情况下似乎运行良好.

如果很快就这个问题没有进一步的活动,我将作为副本关闭并指向上面的文章.

Der*_*way 16

基本上你需要做的是提供一个自定义UICollectionViewLayout子类,当边界发生变化时(当视图滚动边界变化时)使自身无效.然后提供UICollectionViewLayoutAttributes补充视图,其中更新中心以拥抱集合视图的当前边界(顶部,底部,左侧,右侧,等等).

我在github上添加了一个演示此策略的项目.

更新:从iOS 9开始,UICollectionViewFlowLayout有两个非常方便的属性可以大大简化这项任务.见sectionHeadersPinToVisibleBoundssectionFootersPinToVisibleBounds.

  • 无论效率与否,在边界更改时使布局无效正是Apple似乎已经实现iOS 9固定的方式.在启用了固定滚动的情况下滚动时,每秒会调用几次"invalidateLayout". (2认同)

Tho*_*aux -6

UICollectionViewController(如UITableVC)是一个“快捷方式”,这两个类只是覆盖UIViewController,为您创建collectionView。

您可以轻松地做到这一点并自行添加粘性视图。