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.

相关文章

UITabBarController 是 iOS 中用于管理和显示选项卡界面的一...
UITableView的重用机制避免了频繁创建和销毁单元格的开销,使...
Objective-C中,类的实例变量(instance variables)和属性(...
从内存管理的角度来看,block可以作为方法的传入参数是因为b...
WKWebView 是 iOS 开发中用于显示网页内容的组件,它是在 iO...
OC中常用的多线程编程技术: 1. NSThread NSThread是Objecti...