我在想如何正确初始化我的单元格,因为当它们为初始加载的简单单元格渲染时非常平滑+快速时,在滚动更复杂的类型时会出现明显的混乱现象。我该如何正确地初始化一个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