我想知道如何正确初始化我的单元格,因为虽然它们在初始加载的简单单元格中呈现完美平滑+快速,但在滚动浏览更复杂的类型时会有一个重要的提升。
由于这些单元格在可见一次后也可以平滑滚动,我怀疑在第一次显示单元格时会发生一些初始化。
基本上我想要人工镜像任何平台正在做的事情,而应用程序是空闲的,以防止用户体验这个hickup。
不幸的是,我似乎无法完成这项工作。
虽然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++;
}
}
答案 0 :(得分:0)
这完全取决于您在更复杂的细胞中尝试显示的内容。例如,如果已经有一个具有相同的reuseidentifier的单元格准备好用于填充tableview,则它不会使用太多资源来重用UIControl,例如按钮,UISwitch等。根据我的经验,填充的一些资源更密集的元素是UIImageViews,例如,您可能从URL获取图像。我强烈建议你应该创建数组或列表,用于填充相关单元格所需的任何数据,然后使用IndexPath.Row来获取它们。尝试预先下载&#39;来自URL等的图片可能值得一看Xamarin开发者网站上的文档,因为他们承认表视图是一个可能需要开发人员注意优化的元素。
注意:我不会尝试预先缓存&#39;作为iOS的单元格已经这样做,因此重用标识符&#39;。我只是试着预先缓存&#39;任何可能需要一段时间才能显示的数据。