layoutAttributesForElementsInRect 的无限循环

Posted

技术标签:

【中文标题】layoutAttributesForElementsInRect 的无限循环【英文标题】:Infinite Loop of layoutAttributesForElementsInRect 【发布时间】:2014-06-05 16:05:44 【问题描述】:

我完全不知道为什么会发生这种情况,但无论出于何种原因,我使用的集合视图都会无限循环 [UICollectionViewData layoutAttributesForElementsInRect:] 方法。

集合视图位于我的自定义导航栏内。在我使用此自定义导航栏的一种情况下,一切都按预期工作。在另一种情况下,它会无限循环。

我已经尝试过不在collectionView 上设置数据源或委托。 我已尝试设置数据源和委托,但为itemsInSection 返回0。 我在工作情况下使用自动布局,我在工作情况下初始化自定义导航栏。

关于发布代码,我不确定要发布什么。无限循环在调用[UIWindow makeKeyAndVisible] 之后开始。此方法永远不会返回。直到经过时间分析后,我才发现是这个[UICollectionViewData layoutAttributesForElementsInRect:] 导致了问题。

【问题讨论】:

【参考方案1】:

当我手动将 contentOffset 更新为没有元素的 collectionView 时(即 numberOfItemsInSection 为 0 时),我在 [UICollectionViewData layoutAttributesForElementsInRect:] 中遇到了同样的无限循环问题。

【讨论】:

这条评论救了我们的培根。谢谢安德鲁 伙计,如果我 2 天前才找到你的答案.. 非常感谢。 在我的情况下,我在集合视图的超级视图上调用 setNeedsLayout(不需要设置偏移量)【参考方案2】:

我对表格视图中不同集合视图的高度有疑问,所以我遵循了这个UICollectionView inside a UITableViewCell — dynamic height?。但我错误地注释掉了[self.collectionView layoutIfNeeded];,因为我认为它会提高滚动性能。我取消了它的注释,它又工作了!不知道为什么它会起作用

【讨论】:

以上是关于layoutAttributesForElementsInRect 的无限循环的主要内容,如果未能解决你的问题,请参考以下文章