我有一个UICollectionView,我想在它显示之前重新加载。集合视图源中的项目数可能已更改,因此重新加载会添加新项目或删除不再存在的项目。
在我的视图控制器中,我有:
public override void ViewWillAppear(bool animated)
{
base.ViewWillAppear(animated);
this.source.UpdateAvailableItems();
this.CollectionView.ReloadSections(new NSIndexSet(0));
}
这样做我想要的除了如果项目被删除,则会显示集合视图,并且用户会短暂地看到这些项目消失。添加新项目的情况类似,但看到新项目的添加有点困难。
(ReloadData基本上不起作用,这就是我使用ReloadSections的原因。请参阅:UICollectionView reloadData not functioning properly in iOS 7)
(每次来源项目发生变化时,我都无法重新加载集合视图,因为当它不可见时,这可能每秒发生一百次)
有没有人知道我可以在集合视图出现之前重新加载和渲染的方式?用UIView.PerformWithoutAnimation包装ReloadSections也无济于事。
答案:Tim Edward解决方案的C#实施:
public override void ViewWillAppear(bool animated)
{
base.ViewWillAppear(animated);
this.source.UpdateAvailableItems();
UIView.PerformWithoutAnimation(() =>
{
this.CollectionView.PerformBatchUpdates(
() => this.CollectionView.ReloadSections(new NSIndexSet(0)),
null);
});
}
答案 0 :(得分:2)
你尝试过类似的东西吗?
[UIView setAnimationsEnabled:NO];
[collectionView performBatchUpdates:^{
// Reload sections here
} completion:^(BOOL finished) {
[UIView setAnimationsEnabled:YES];
}];