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 的无限循环的主要内容,如果未能解决你的问题,请参考以下文章