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。正如我所看到的,它将调用prepareLayoutlayoutAttributesForElementsInRect 直到死,会有太多的_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 问题

UICollectionView 部分标题崩溃 iOS 8

当我在 iOS 14 上的 UITableView 单元格内使用 UICollectionView 时,不会调用 UICollectionView cellForItemAt