ios – 如何为UICollectionView创建“粘性”页脚?

为UICollectionView提供页脚的最佳方法是什么?“粘贴”在给定页面上的屏幕底部?假设UICollectionView是全屏的,只有一个部分.

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

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

更新:装饰视图

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

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

更新:粘性标题

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

有关标题的详细信息:

How to make Supplementary View float in UICollectionView as Section Headers do in UITableView plain style

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

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

解决方法

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

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

更新:从iOS 9开始,UICollectionViewFlowLayout有两个非常方便的属性,可以大大简化这项任务.请参阅SectionHeadersPinToVisibleBounds和sectionFootersPinToVisibleBounds.

以上是来客网为你收集整理的ios – 如何为UICollectionView创建“粘性”页脚?全部内容,希望文章能够帮你解决ios – 如何为UICollectionView创建“粘性”页脚?所遇到的程序开发问题。

如果觉得来客网网站内容还不错,欢迎将来客网网站推荐给程序员好友。