我有一个UICollectionView
,其上有多个部分和多种类型的自定义单元格。
但是,不是在相同类型的每个单元格上显示相同的子视图,每次我从屏幕上滚动该部分并重新打开时,只有部分自定义单元格显示它们上的子视图。
请检查以下屏幕截图:
为什么?
我在viewDidLoad
注册了各种单元格:
[self registerClass:[UICollectionViewCell class] forCellWithReuseIdentifier:normalCellID];
[self registerClass:[BLMineSectionCollectionViewCell class] forCellWithReuseIdentifier:sectionCellID];
[self registerClass:[BLMineOrderCollectionViewCell class] forCellWithReuseIdentifier:orderCellID];
我在cellForItemAtIndexPath
做了:
if (indexPath.section == 0 ||
indexPath.section == 2 ||
indexPath.section == 4 ||
indexPath.section == 5)
{
BLMineSectionCollectionViewCell *sectionCell = [collectionView dequeueReusableCellWithReuseIdentifier:sectionCellID forIndexPath:indexPath];
return sectionCell;
}
else if (indexPath.section == 1)
{
BLMineOrderCollectionViewCell *orderCell = [collectionView dequeueReusableCellWithReuseIdentifier:orderCellID forIndexPath:indexPath];
UIColor *color = nil;
switch (indexPath.item)
{
case 0:
color = [UIColor redColor];
break;
case 1:
color = [UIColor greenColor];
break;
case 2:
color = [UIColor purpleColor];
break;
default:
color = nil;
break;
}
orderCell.iconImageView.backgroundColor = color;
orderCell.textLabel.backgroundColor = color;
return orderCell;
}
else
{
UIColor *color = nil;
color = [UIColor blueColor];
UICollectionViewCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:normalCellID forIndexPath:indexPath];
cell.contentView.backgroundColor = color;
return cell;
}
请指出我的错误,谢谢!
答案 0 :(得分:0)
实际上UICollectionView
在“重复使用”策略方面与UITableView
略有不同。
当向上和向下滚动时,UITableView
会在每次有新单元格进入屏幕区域时触发layoutSubviews
,而UICollectionView
则不会。{/ p>
这就是为什么有些UICollectionViewCell
没有显示上面的完整子视图。
我所做的是手动向单元格对象发送setNeedsLayout
消息以触发其layoutSubviews
方法。