6

我有一个习惯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值将确定补充视图所在的页面,但是我不确定这是否是处理此问题的合适方法,因此我想我会事先征求意见。

任何帮助都会很棒,

谢谢。

4

0 回答 0