AFAIK,导致UICollectionViewLayout重启布局过程的原因是:
UICollectionView
的框架更改UICollectionView
重新加载数据UICollectionView
插入/删除项目UICollectionView
的绑定更改(如果shouldInvalidateLayoutForBoundsChange返回YES)在我的自定义布局实现中,我想更改某些项目的UICollectionViewLayoutAttributes
作为绑定更改(将标题添加到顶部,如UITableView
,动画项目输入/输出.etc)。
问题在于,无论出于何种原因,UICollectionView总是调用其布局对象的prepareLayout
方法(包含繁重的布局计算)并且使得滚动不稳定。
如果原因是UICollectionView
的约束更改,我会选择退出布局计算的解决方案。
如何查看prepareLayout
来电的原因?
答案 0 :(得分:2)
我在shouldInvalidateLayoutForBoundsChange:
设置了一个标志,所以我知道在发生这种情况时不会重新计算所有内容(在每一帧......)。
您可以在调用prepareForAnimatedBoundsChange:
时设置另一个标志,这在插入新项目或集合视图的边界发生更改时会发生。然后,您可以知道由于滚动或由于您在shouldInvalidateLayoutForBoundsChange:
中设置的标记而调整边界是否已更改。
但是,您不必过于担心为什么必须准备布局,因为在大多数情况下您应该完全重新计算它。在我的项目中,我在prepareLayout
中执行不同操作的唯一情况是失效是由滚动引起的。