我有一个习惯UICollectionViewLayout
,它使用补充视图在每个页面的底部放置一个页脚。
这似乎一直运作良好,直到我开始在页面底部插入单元格。
由于补充视图必须链接到 UICollectionView 中的 NSIndexPath,因此在我的准备布局方法中,我检测页面上的最后一个单元格,然后将补充视图的 layoutAttributes 存储到页面上的最后一个 indexPath。
这是插入新单元格之前的集合视图布局:
|- Page 1
|-- [0, 0]
|-- [0, 1]
|-- [0, 2]
|- Footer (indexPath [0, 2])
|- Page 2
|-- [1, 0]
|-- [1, 1]
|- Footer (indexPath [1, 1])
正如所料,我的 prepareLayout 方法UICollectionViewLayoutAttributes
为 indexPaths[0, 2]
和[1, 1]
.
layoutAttributesForSupplementaryViewOfKind:atIndexPath:
方法也被调用两次,返回 indexPaths ([0, 2]
和[1, 1]
)的正确属性
现在的问题是,当我在索引处插入一个新单元格时,[1, 2]
该prepareLayout
方法会正确地重新计算布局并将第二个页脚的 indexPath 更改为[1, 2]
您所期望的。
但是,当layoutAttributesForSupplementaryViewOfKind:atIndexPath:
再次调用更新接口时,它的indexPath
属性仍然返回[1, 1]
。然后在方法上返回 nil,因为它不存在并导致崩溃(显然)!
为什么layoutAttributesForSupplementaryViewOfKind:atIndexPath:
仍然返回不正确的(旧)indexPath?我已经检查了布局是否失效,并且存储 layoutAttributes 的 footerAttributes 字典具有正确的(新)indexPath,所以从我所读的内容来看,这应该可以工作吗?
同样重要的是要注意,这只发生在动画插入发生时......只是调用reloadData
不会崩溃。
此外,我无法将补充视图链接到单个部分,因为我的自定义布局旨在对 collectionView 进行分页,并且部分可以溢出到不同的页面上,这意味着每个部分有多个补充视图。
这是我布局的 .m 文件的要点: https ://gist.github.com/liamnichols/6621694
或者你可以在这里找到回购:https ://github.com/liamnichols/LNCollectionViewPagedLayout/tree/master/Source
我的替代解决方案是将补充视图分配给自定义值NSIndexPath
,该indexPath.row
值将确定补充视图所在的页面,但是我不确定这是否是处理此问题的合适方法,因此我想我会事先征求意见。
任何帮助都会很棒,
谢谢。