【发布时间】:2020-08-26 05:48:20
【问题描述】:
我想知道invalidateLayout() 和reloadData() 之间有什么区别
我已阅读文档here 和here,但留下以下问题:
- 我有数据作为数组,这样
cellForItemAt indexPath可以直接用dataArray[indexPath.item]引用数组,并且数组中的每个数据对象都可以填充单元格。reloadData()将确保在对dataArray进行更改时,这会反映在collectionView中。通过一些小测试,invalidateLayout()似乎也会观察到这种变化。总是这样吗? - 这两个函数在调整单元格大小方面似乎具有相同的效果,这总是正确的吗?
- 当调用
invalidateLayout()时,是否也会像reloadData()一样为每个单元格调用cellForItemAt indexPath? - 如果以上所有情况都成立,那么您是否还需要使用
reloadData(),因为 Apple 表示要谨慎使用它?
任何其他关于这两个函数在基本层面上的差异的 cmet 都会有所帮助(何时使用每个函数等)
【问题讨论】:
-
当您想要更新单元格的内容时,您应该始终使用 reloadData。
invalidateLayout()不会触发 cellForItem (至少它不能保证),它会更新大小和布局。更新布局(如旋转设备) - invalidateLayout, data - reloadData
标签: ios swift xcode uicollectionview uikit