layoutAttributesForSupplementaryViewOfKind:atIndexPath:传入不正确的indexPath

时间:2013-09-19 10:41:02

标签: ios objective-c animation uicollectionview uicollectionviewlayout

我有一个自定义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值将确定补充视图所在的页面但是我不确定这是否适合于处理这个,以为我会事先征求意见。

任何帮助都会很棒,

感谢。

0 个答案:

没有答案