UICollectionView 单元格配置太多次
Posted
技术标签:
【中文标题】UICollectionView 单元格配置太多次【英文标题】:UICollectionView cell gets configured too many times 【发布时间】:2013-03-20 12:20:36 【问题描述】:我注意到UICollectionView
在其数据源上多次调用collectionView:cellForItemAtIndexPath:
。例如,在每个 layoutSubviews
上,所有单元格都被“重新配置”,无论它们是否已经可见。
当collectionView:cellForItemAtIndexPath:
被调用时,我们应该:
您对此方法的实现负责创建, 配置并返回给定项目的适当单元格。 您可以通过调用
dequeueReusableCellWithReuseIdentifier:forIndexPath:
的方法 集合视图并传递对应于的重用标识符 你想要的细胞类型。该方法总是返回一个有效的单元格 目的。收到单元格后,您应该设置任何属性 对应对应item的数据,执行任意 额外需要的配置,并返回单元格。
问题是配置单元并不总是一项廉价的操作,我不明白为什么要重新配置已经配置的单元。
我们如何避免单元的冗余配置?还是有什么我没有正确理解的地方?
【问题讨论】:
查看collectionView: willDisplayCellAtIndexPath,看看它被调用的次数是多于还是少于cellForItemAtIndexPath。您只需要真正使用 cFIAIP 来分配单元格,wDCAIP 是您应该执行实际显示逻辑的地方。 【参考方案1】:我认为您无法避免这种情况。问题是 UICollectionView 太笼统了,FlowLayout 不是唯一的布局。由于您可以进行疯狂的布局,因此任何布局更改(例如 layoutsubviews)都可能完全改变您想要的布局——纵向网格和横向三角形排列......知道布局应该是什么的唯一方法是找出每个单元格的位置和大小。
UICollection 视图对于很多元素来说并不便宜。
【讨论】:
【参考方案2】:配置cell
后只需使用cell.tag = 1;
即可,下次您可以避免使用if(!cell.tag)
重新配置相同的单元格。
- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath
UICollectionViewCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:YourCellReuseIdentifier forIndexPath:indexPath];
if(!cell)
//Create cell ...
if(!cell.tag)
//Do things you have to do only once
else
//DO things you have to do every time.
return cell;
【讨论】:
以上是关于UICollectionView 单元格配置太多次的主要内容,如果未能解决你的问题,请参考以下文章
UICollectionView 布局间距问题。单元格之间的空间太大
配置 UICollectionView 以保持相同的单元格视图
Swift - UICollectionView reloadItems 需要太长时间
以编程方式声明的 UICollectionView 不会更改 Swift 5 中单元格的大小
处理 UICollectionView 单元格上的滑动:在 UICollectionView 或每个单元格上实现处理程序?