【发布时间】:2015-04-23 22:30:25
【问题描述】:
我遇到了一个小问题,但找不到解决方案。
我试图在collectionView(collectionView:, cellForItemAtIndexPath indexPath:) 中的第一个单元格出列后使 UICollectionViewFlowLayout 的布局无效,以便它在出现给用户之前适合它的内容。我需要这样做,因为我需要访问单元格 ui 元素,这些元素在第一次调用 sizeForItemAtIndexPath 时不可用。
在 iOS 8 中这可以正常工作,但在 iOS 7 中 invalidateLayout 不会立即更新布局,正如 Apple 文档中所述:
请记住,调用 invalidateLayout 方法不会立即开始布局更新过程。该方法只是将布局标记为与数据不一致,需要更新。在下一个视图更新周期中,集合视图会检查其布局是否脏,如果是则更新它。实际上,您可以快速连续多次调用 invalidateLayout 方法,而无需每次都立即触发布局更新。
现在我想知道是否有适用于 iOS 7 的解决方法,可以立即更新流布局。
reloadData 不是解决方案,因为在出列单元格时调用它会破坏整个集合视图。
【问题讨论】:
-
呃,你想要动态调整高度的 collectionViewCells 吗?
-
是的,它已经在 iOS8 上运行良好。第一次调用 cellForIndexPath 时,我存储默认单元格,以便我可以访问我在情节提要中设置的字体。然后我使布局无效
-
如果你没有使用属性化的 HTML 解析文本,并且你有一个带有一团文本的基本单元格,你可以通过调用类似 @987654325 的方法来计算渲染 UILabel 文本所需的高度@ 这适用于 iOS 7 和 8。
-
我其实是用这个方法的,把单元格中标签的字体作为一个属性。我的问题是在 iOS 7 中没有立即调用 invalidateLayout,但它在 iOS 8 中。我自己已经找到了一个解决方案,我将在一秒钟内发布
标签: ios swift layout ios7 uicollectionview