我有一個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)
(我不能每次源的事項發生變化時重新加載真正的集合視圖,因爲這是發生可能每秒不到100次)
有沒有人知道一種方式,我可以收集視圖重新加載和呈現完全之前,它出現?用UIView.PerformWithoutAnimation包裝ReloadSections調用也沒有幫助。
答案: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);
});
}
只是一個想法,但你有沒有嘗試把base.ViewWillAppear在你的覆蓋的最後,而不是在開始? – pbasdf 2014-10-01 15:32:09
這是一個很好的建議,我沒有嘗試過,但可悲的是我只是做了,並沒有奏效。 – Aurast 2014-10-01 15:58:07