我注意到UICollectionView
在其数据源上调用了collectionView:cellForItemAtIndexPath:
很多次。例如,在每个layoutSubviews
上,所有单元格都被“重新配置”,无论它们是否已经可见。
调用collectionView:cellForItemAtIndexPath:
时,我们应该:
您对此方法的实施负责创建, 配置并返回给定项目的相应单元格。 你这样做是通过调用
dequeueReusableCellWithReuseIdentifier:forIndexPath:
方法 集合视图并传递与之对应的重用标识符 你想要的细胞类型。该方法始终返回有效单元格 宾语。收到单元格后,您应该设置任何属性 对应于相应项目的数据,执行任何 额外需要的配置,并返回单元格。
问题是配置单元并不总是一个便宜的操作,我不明白为什么我应该重新配置已经配置的单元。
我们如何避免细胞的冗余配置?或者有什么我不能正确理解?
答案 0 :(得分:1)
我认为你不能避免这种情况。问题是 UICollectionView 是如此通用,而FlowLayout不是唯一的布局。由于您可以制作疯狂的布局,任何布局更改(如布局子视图)都可以完全改变您想要的布局 - 纵向网格和横向三角形排列...了解布局应该是什么的唯一方法是找出每个细胞的位置和大小。
对于很多元素来说,UICollection 视图不便宜。
答案 1 :(得分:-1)
配置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;
}