我有一个自定义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方法为indexPaths UICollectionViewLayoutAttributes
和[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
值将确定补充视图所在的页面但是我不确定这是否适合于处理这个,以为我会事先征求意见。
任何帮助都会很棒,
感谢。