2014-10-01 65 views
1

我有一個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); 
    }); 
    } 
+1

只是一個想法,但你有沒有嘗試把base.ViewWillAppear在你的覆蓋的最後,而不是在開始? – pbasdf 2014-10-01 15:32:09

+0

這是一個很好的建議,我沒有嘗試過,但可悲的是我只是做了,並沒有奏效。 – Aurast 2014-10-01 15:58:07

回答

2

您是否嘗試過類似的東西?

[UIView setAnimationsEnabled:NO]; 

[collectionView performBatchUpdates:^{ 

    // Reload sections here  

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

這工作,謝謝。我已經在我的問題中發佈了我的C#翻譯。 – Aurast 2014-10-01 16:02:25

+0

那真是太棒了。 – 2014-10-01 16:03:54

相關問題