我正在重新加载集合视图,并且单元格重用顺序似乎是不确定的。
这本身并不是问题,但是我正在使用SDWebImage异步加载图像并使用GPUImage过滤它们(据我所知,它也是异步工作的)。结果是令人讨厌的闪烁,即使集合视图内容没有改变,因为它几乎总是交换相邻的单元格。
当然,我可以添加一些具有后处理图像的同步内存缓存,因此在配置单元格之前设置图像,而不是稍后回调,但它是以不必要的增加为代价的。复杂性,我想避免。
有没有办法在没有集合视图单元重用的情况下“就地”重新加载单个集合视图单元?
答案 0 :(得分:1)
应该使用批量更新来插入和删除单个行,而不是完全重新加载。它保留了现有的细胞。
[collectionView reloadData];
[collectionView performBatchUpdates:^() {
// Use insertItemsAtIndexPaths, deleteItemsAtIndexPaths,
// insertSections, deleteSections
// to add and delete sections and rows
} completion:nil];
缺点是刷新逻辑会变得更加复杂,因为您需要区分先前和当前的数据源。