我在我的一个项目中使用UICollectionView
,当我尝试在集合视图上调用reloadData
时,单元格顺序总是相同。
我创建了类似的单元格:
- (UICollectionViewCell *)collectionView:(UICollectionView *)aCollectionView
cellForItemAtIndexPath:(NSIndexPath *)aIndexPath {
PPhotoCVCell *cell =
[self._collectionView dequeueReusableCellWithReuseIdentifier:@"PPhotoCVCell"
forIndexPath:aIndexPath];
if (cell.photo == nil) {
PPhoto *photo = self._photos[aIndexPath.row];
cell.photo = photo;
}
cell.enableEditing = self._editing;
cell.layer.shouldRasterize = YES;
cell.layer.rasterizationScale = [UIScreen mainScreen].scale;
return cell;
}
单元格有两个类UIImageView
的子视图,一个用于图像,另一个用于覆盖,如果用户选择了单元格。
当我处于编辑模式时,用户可以选择单元格。当选择了一些单元格并且用户退出编辑模式时,我在覆盖的alpha
方法中将覆盖图像视图的0.0
值设置为setSelected:
。
问题是当我在集合视图上调用reloadData
方法时,所选单元格中的叠加图像视图隐藏而没有动画,但在其他单元格中,叠加图像视图在没有动画的情况下显示,并随着正确的动画消失。
当我打电话给reloadData
时,我发现照片的图像视图也在变化。
这个问题有什么解决方案吗?
听起来你的细胞正在被回收。在你的细胞qazxsw poi中,确保你正在移除叠加层。然后在qazxsw poi中添加适当的叠加层。
我遇到了同样的问题,每次我执行reloadData时,集合视图都会反转它的顺序。由于我在5年后没有看到答案,我发布了我的解决方案以防其他人遇到此问题。
你实际上有两个选择:
prepareForReuse
collectionView: cellForItemAtIndexPath:
这个行为可能在某个地方有合理的解释,但我找不到一个。