layoutAttributesForSupplementaryViewOfKind:atIndexPath:传入不正确的indexPath

我有一个自定义的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方法创build和存储UICollectionViewLayoutAttributespath[0, 2][1, 1] [0, 2] UICollectionViewLayoutAttributes。
layoutAttributesForSupplementaryViewOfKind:atIndexPath:方法也被调用两次,返回indexPaths( [0, 2][1, 1] )的正确属性

现在的问题是,当我在索引[1, 2]处插入新的单元格时[1, 2] prepareLayout方法正确地重新计算布局,并像预期的那样将第二个页脚的indexPath更改为[1, 2]

但是,当再次调用layoutAttributesForSupplementaryViewOfKind:atIndexPath:来更新接口时,其indexPath属性仍然返回[1, 1] 。 然后返回nil,因为它不存在并导致崩溃(显然)!

为什么layoutAttributesForSupplementaryViewOfKind:atIndexPath:仍然返回不正确的(旧)indexPath? 我已经检查布局是无效的,而我的footerAttributes存储layoutAttributes的字典有正确的(新)indexPath所以从我读过这应该只是工作?

注意到这一点也是很重要的,这只发生在一个animation插入发生时…只要调用reloadData不会崩溃。

此外,我无法将补充视图链接到单个部分,因为我的自定义布局devise为页面集合视图,而部分可以溢出到不同页面上,这意味着每个部分有多个补充视图。

这是我的布局.m文件的要点: https : //gist.github.com/liamnichols/6621694

或者你可以在这里find回购: https : //github.com/liamnichols/LNCollectionViewPagedLayout/tree/master/Source

我的替代解决scheme是将补充视图分配给自定义的NSIndexPath ,其中indexPath.row值将确定补充视图在哪个页面上,但是我不确定这是否是一种合适的方式来处理这个想法,我会问提前build议。

任何帮助将是伟大的,

谢谢。