iOS 8 上的 UICollectionView self-sizing-cell 将与 UIDynamic flowLayout 和重复调用 _updateVisibleCellsNow 一起崩溃
Posted
技术标签:
【中文标题】iOS 8 上的 UICollectionView self-sizing-cell 将与 UIDynamic flowLayout 和重复调用 _updateVisibleCellsNow 一起崩溃【英文标题】:UICollectionView self-sizing-cell on iOS 8 will crash with UIDynamic flowLayout and repeating call to _updateVisibleCellsNow 【发布时间】:2015-06-24 11:50:38 【问题描述】:我正在尝试使用所谓的“自定尺寸单元”,这意味着:
在flowLayout
上设置estimatedItemSize
在单元格类中覆盖 preferredLayoutAttributesFittingAttributes
如:UICollectionView Self Sizing Cells with Auto Layout
我需要这样的动态效果:http://www.teehanlax.com/blog/implementing-a-bouncy-uicollectionviewlayout-with-uikit-dynamics/
没有 UIDynamic 也能正常工作,但我需要 UIDynamic。正如我所看到的,它将调用prepareLayout
和layoutAttributesForElementsInRect
直到死,会有太多的_updateVisibleCellsNow
在排队等候。
我不知道如何解决这个问题,请帮助我以防万一。或者,如果我以错误的方式使用这些技术,请告诉我。
【问题讨论】:
【参考方案1】:有两件事对我有用:
确保您的集合视图本身具有为放置在其父视图中而定义的布局约束。 当估计大小大于最终大小时,我遇到了这个崩溃。如果我将估计大小设置为较小的值,崩溃就会停止。【讨论】:
这是真的...正确答案,我设置了estimatedItemSize = (0, 0) 对我来说,设置estimatedItemSize
的 .zero
完全禁用自动调整大小,但 (1.0, 1.0) 的大小修复了 ios 9 上 _updateVisibleCellsNow:
的无限递归【参考方案2】:
如果任何尺寸或框架位置发生变化,它将触发所有单元格的preferredLayoutAttributesFittingAttributes,直到所有单元格的框架没有改变。
行为流程如下:
1. Before self-sizing cell
2. Validated self-sizing cell again after other cells recalculated.
3. Did changed self-sizing cell
如果第二步不能稳定所有单元格的位置和大小,就会变成无限循环。
请参考我的帖子:UICollectionView Self Sizing Cells with Auto Layout
【讨论】:
以上是关于iOS 8 上的 UICollectionView self-sizing-cell 将与 UIDynamic flowLayout 和重复调用 _updateVisibleCellsNow 一起崩溃的主要内容,如果未能解决你的问题,请参考以下文章
iOS 8.4 不更新 uicollectionviewcell 上的约束
iOS 6 和 iOS 7 上的 UICollectionView 重新加载
iPhone 3GS 上的 iOS 6.0 上的 UICollectionView 崩溃
Swift 3 - iOS 11.2 上的 UICollectionview 问题
当我在 iOS 14 上的 UITableView 单元格内使用 UICollectionView 时,不会调用 UICollectionView cellForItemAt