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和存储UICollectionViewLayoutAttributes
path[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议。
任何帮助将是伟大的,
谢谢。