セルを適切に初期化する方法が不思議です。複雑なタイプをスクロールするときには、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++;
}
}
個人的には、アイテムソース内のすべてのデータ要素のセルをいくつかのセルについて「事前作成」することは避けますが、データ要素の数が、あなたが試みているUITableViewの視覚的なセル数を超えるとユーザーが決して必要としない可能性のあるセルの作成と格納のために、メモリとCPUの不十分な使用で下層の問題を隠します。 'cellForRowAtIndexPath:'の中にあなたのセルを作成する際に、あなたの根本的な問題を引き起こしているものを測り、それを修正することに焦点を当てて、先読みするセルのパスを下ろそうとする前に、 – SushiHangover