我在想如何正確初始化我的單元格,因爲當它們爲初始加載的簡單單元格渲染時非常平滑+快速時,在滾動更復雜的類型時會出現明顯的混亂現象。我該如何正確地初始化一個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++;
}
}
就我個人而言,我會避免爲項目源中的每個數據元素「預先創建」一個單元格,對於幾個單元格,但是,一旦數據元素的數量超過了您嘗試使用的UITableView中單元格的可視數量掩蓋用戶可能永遠不需要的細胞創建和存儲使用不足的內存和cpu的底層問題。我將在'cellForRowAtIndexPath:'cell內創建你的單元格內容,導致你的根問題,並着重於在嘗試沿着預取單元格的路徑進行修正之前,如果用戶向下/向上滾動,可能會看到下一個單元格。 – SushiHangover