在出现之前重新加载UICollectionView,而无需用户看到更改

时间:2014-10-01 14:56:27

标签: ios xamarin uicollectionview

我有一个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);
     });
  }

1 个答案:

答案 0 :(得分:2)

你尝试过类似的东西吗?

[UIView setAnimationsEnabled:NO];

[collectionView performBatchUpdates:^{

    // Reload sections here    

} completion:^(BOOL finished) {
    [UIView setAnimationsEnabled:YES];
}];