2017-03-03 43 views
0

我在想如何正確初始化我的單元格,因爲當它們爲初始加載的簡單單元格渲染時非常平滑+快速時,在滾動更復雜的類型時會出現明顯的混亂現象。我該如何正確地初始化一個UITableViewCell

由於這些單元格在可見一次後也能順利滾動,因此我懷疑初始化是在單元格第一次顯示時發生的。

本質上,我想人工鏡像無論平臺在做什麼,而應用程序是空閒的,以防止用戶遇到這種混亂。

不幸的是,我似乎無法完成這個完美的任務。

雖然GetCell部分調用已經明顯平滑了這個hickup,但是當第一次顯示一個單元格時,仍然會有輕微的fps下降。

這裏就是我已經嘗試過(注意,註釋掉部分對加快初始化影響不大。):

public void Prefetch(int start, int range) 
     { 
      Debug.WriteLine(nameof(Prefetch)); 
      var current = start; 
      var end = start + range; 
      var tv = GetTableView(); 
      while (current < ItemsSource.Count && current < end) 
      { 
       if (_prefetchedCellIndices.Contains(current)) 
       { 
        current++; 
        continue; 
       } 

       var cell = GetCell(tv, NSIndexPath.FromRowSection(current, 0)); 
//    cell.SetNeedsLayout(); 
//    cell.LayoutIfNeeded(); 
//    cell.SetNeedsUpdateConstraints(); 
//    cell.UpdateConstraintsIfNeeded(); 
//    cell.Init(); 
       current++; 
      } 
     } 
+1

就我個人而言,我會避免爲項目源中的每個數據元素「預先創建」一個單元格,對於幾個單元格,但是,一旦數據元素的數量超過了您嘗試使用的UITableView中單元格的可視數量掩蓋用戶可能永遠不需要的細胞創建和存儲使用不足的內存和cpu的底層問題。我將在'cellForRowAtIndexPath:'cell內創建你的單元格內容,導致你的根問題,並着重於在嘗試沿着預取單元格的路徑進行修正之前,如果用戶向下/向上滾動,可能會看到下一個單元格。 – SushiHangover

回答

0

這完全取決於你想在更復雜的細胞顯示的內容。例如,如果已經有一個具有相同重用標識的單元準備好填充tableview,它就不會使用太多的資源來重用UIControls,如按鈕,UISwitch等。根據我的經驗,一些用來填充更多資源的元素是UIImageView,例如,您可能從URL獲取圖像。我強烈建議的是,你應該創建數組或者任何需要用來填充相關單元格的數據的列表,然後使用IndexPath.Row來獲取它們。嘗試從URL中'預先下載'圖像等。可能值得關注Xamarin開發人員網站上的文檔,因爲他們承認表視圖是可能需要開發人員注意優化的元素。

Xamarin Optimisation Page

注:我不會嘗試「預緩存」的細胞的iOS已經做的是因此「再利用標識符」。我只是試圖「預先緩存」任何可能需要一段時間才能顯示的數據。