ios - 如何区分 UICollectionViewLayout 准备布局的原因(iOS 6)?

标签 ios iphone objective-c uicollectionview uicollectionviewlayout

据我所知,导致 UICollectionViewLayout 重新启动布局过程的原因是:

  • UICollectionView的frame变化
  • UICollectionView 重新加载数据
  • UICollectionView 插入/删除项目
  • UICollectionView 的绑定(bind)变化(如果 shouldInvalidateLayoutForBoundsChange 返回 YES)

在我的自定义布局实现中,我想在绑定(bind)更改时更改某些项目的 UICollectionViewLayoutAttributes(将标题粘贴到顶部,如 UITableView,动画项目进/出.等)。

问题在于,无论出于何种原因,UICollectionView 总是调用其布局对象的 prepareLayout 方法(其中包含繁重的布局计算),这会导致滚动不稳定。

如果原因是 UICollectionView 的绑定(bind)更改,我将寻求选择退出布局计算的解决方案。

如何查看 prepareLayout 调用的原因?

最佳答案

我在 shouldInvalidateLayoutForBoundsChange: 中设置了一个标志,所以我知道在发生这种情况时(在每一帧...)不要重新计算所有内容。

您可以在调用 prepareForAnimatedBoundsChange: 时设置另一个标志,这会在插入新项或 Collection View 的边界更改时发生。然后,由于您在 shouldInvalidateLayoutForBoundsChange: 中设置的标志,您可以知道边界是否因滚动或调整大小而更改。

但是,您不必过分担心为什么必须准备布局,因为无论如何在大多数情况下您都应该重新计算它。在我的项目中,我在 prepareLayout 中做一些不同的事情的唯一情况是滚动导致无效。

关于ios - 如何区分 UICollectionViewLayout 准备布局的原因(iOS 6)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20794057/

相关文章:

ios - 无法在 SpriteKit 中获取 skAudioNode 的 3D 音频效果

iphone - 我们可以更改 iOS 应用程序进行升级吗?

c++ - 头文件之谜

objective-c - objective-c 中的 Swift 全局变量和全局函数

iphone - 在 Objective C 中获取第一响应者

ios - 如何在iOS中生成24位True Color动画Gif?

ios - 如何增加主视图的 subview 的大小

ios - 在 SpriteKit 中实现无限/重复滚动世界的最佳方法是什么?

iphone - GLSL:iPhone应用程序无法访问内置属性?

iphone - 在 iPhone 上的 UIWebView 中显示链接图像 (<img src=.../>) 不起作用