2017-03-03 11 views
0

セルを適切に初期化する方法が不思議です。複雑なタイプをスクロールするときには、UITableViewCellを適切に初期化するにはどうすればよいですか?

これらのセルも一度表示された後スムーズにスクロールするので、セルが初めて表示されているときに初期化が行われていると思われます。

私は基本的に、アプリケーションがアイドルである間に、プラットフォームが何をしているのかを人工的に鏡映して、このヒックアップを体験しないようにします。

残念ながら、私はこれをまだ完璧なものにすることはできません。

GetCellのパーツコールは、すでにそのヒックアップをスムーズにしていますが、初めてセルが表示されるときには、わずかな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:'の中にあなたのセルを作成する際に、あなたの根本的な問題を引き起こしているものを測り、それを修正することに焦点を当てて、先読みするセルのパスを下ろそうとする前に、 – SushiHangover

答えて

0

これは、より複雑な細胞内で表示しようとしているものに完全に依存します。たとえば、ボタンやUISwitchesなどのUIControlを再利用するためにあまりにも多くのリソースを使用することはありません。私の経験上、より多くのリソースを消費する要素の中にはUIImageViews(URLからImageを取得する場合など)があります。私が強くお勧めするのは、問題のセルにデータを入れるために必要なデータの配列やリストを作成し、IndexPath.Rowを使ってそれらを取得する必要があることです。 URLなどから画像を「プレロード」してみてください。Xamarinの開発者サイトのドキュメントを見てみる価値があるかもしれません。開発者が最適化する必要がある要素としてテーブルビューを認識しているためです。

Xamarin Optimisation Page

注:私はすでにない「事前キャッシュ」のiOSなどの細胞にしてみてくださいので、「再利用識別子」はありません。私は単に表示するためにしばらく時間がかかる可能性のあるデータを「プリキャッシュ」しようとします。

関連する問題