我有一个UICollectionView,它将UICollectionViewFlowLayout与UIRefreshControl结合使用。当我拉动刷新时,下面的代码块被称为
self.content = nil;
self.content = [[[posts reverseObjectEnumerator] allObjects] copy];
dispatch_async(dispatch_get_main_queue(), ^{
[self.collectionView reloadData];
[self.refreshControl endRefreshing];
});
最终发生的事情是当集合视图被拉下来刷新时,只有索引0和1处的单元格可见。但是,当释放控件时,索引2处的单元格将弹回到视图中,并且(UICollectionViewCell*)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)
将被调用以使索引2处的单元格出列。这将在调用reloadData
之前发生。所以执行的顺序是这样的
[self.collectionView reloadData];
被称为它非常微妙,但有一点轻微的闪烁,因为出于一些遗憾的原因,索引0处的单元格被设置为索引2内容的单元格,然后设置回正确的内容。还有另一个问题,因为我的UICollectionViewSubclass同时具有UITextView
和UIImageView
,所以即使textview只是闪烁,0和2处的图像也会被交换,直到我再次刷新才会切换。
任何人都有任何想法如何在调用reloadData之前阻止2重新加载?或任何修复
编辑:我发现一旦释放刷新控件就不一定会发生这种情况,实际上当刷新控制被拉得足够远以触发刷新然后它在屏幕上做了一个奇怪的小跳/闪烁。在这种情况下,单个单元格出列,然后正确重置。这只是在我不释放控件
的情况下