如何正确初始化UITableViewCell

时间:2017-03-03 15:49:00

标签: xamarin xamarin.ios

我想知道如何正确初始化我的单元格,因为虽然它们在初始加载的简单单元格中呈现完美平滑+快速,但在滚动浏览更复杂的类型时会有一个重要的提升。

由于这些单元格在可见一次后也可以平滑滚动,我怀疑在第一次显示单元格时会发生一些初始化。

基本上我想要人工镜像任何平台正在做的事情,而应用程序是空闲的,以防止用户体验这个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++;
            }
        }

1 个答案:

答案 0 :(得分:0)

这完全取决于您在更复杂的细胞中尝试显示的内容。例如,如果已经有一个具有相同的reuseidentifier的单元格准备好用于填充tableview,则它不会使用太多资源来重用UIControl,例如按钮,UISwitch等。根据我的经验,填充的一些资源更密集的元素是UIImageViews,例如,您可能从URL获取图像。我强烈建议你应该创建数组或列表,用于填充相关单元格所需的任何数据,然后使用IndexPath.Row来获取它们。尝试预先下载&#39;来自URL等的图片可能值得一看Xamarin开发者网站上的文档,因为他们承认表视图是一个可能需要开发人员注意优化的元素。

Xamarin Optimisation Page

注意:我不会尝试预先缓存&#39;作为iOS的单元格已经这样做,因此重用标识符&#39;。我只是试着预先缓存&#39;任何可能需要一段时间才能显示的数据。