【问题标题】:How to improve UILabel performance in a table view?如何提高表视图中的 UILabel 性能?
【发布时间】:2016-02-09 04:30:35
【问题描述】:

我有一个带有自定义单元格的表格视图,我正在尝试对其进行优化以使滚动尽可能平滑。我遵循了大多数关于表格视图优化的建议,例如,使用固定高度,不使用 AutoLayout 等。

除了一件事,我已经达到了非常优化的状态。自定义单元格有一个图像和几个UILabels。一张图像和 3 个标签,性能非常完美。然而,当我添加第 4 个标签时,我开始观察到有点急动,非常小,但不像以前那么顺畅。

我在网上搜了一下,发现CoreText可以帮助性能。 CoreText 是正确的方向吗?在表格视图中使用 UILabel 时,是否还有其他有助于提高性能的方法?

编辑:

我只对UILabel 使用简单的函数,通过设置它的字体、字体颜色、文本和行数。

【问题讨论】:

  • 如下文所述: - UILabel 将其不透明属性设置为 YES - 使用 cell.layer.shouldRasterize = YES stackoverflow.com/questions/3248201/…
  • @GuyDaher 试过,但似乎对性能没有帮助
  • 几乎可以保证您的问题不是 UILabel 而是单元格中的图像。
  • @Rog 当我拥有图像和一个 UILabel 时,滚动处于完美状态。只有在我添加更多 UILabel 之后,滚动才开始变得生涩。也许您是对的,可能是其他事情,但我仍然想了解是否可以做任何事情来提高表格视图中的 UILabel 性能。
  • 您是否在 cellForRow 中进行繁重的计算?特别是对于这个新标签。

标签: ios uitableview uilabel


【解决方案1】:

核心文本可能是性能的终极解决方案,但即使在到达那里之前,我也喜欢使用名为 PaintCode 的程序来绘制特别复杂的单元格的内容。

在你需要达到那个点之前,你可以做一些其他的事情来加快速度:

  1. 在调用cellForRow 之前进行所有计算。因此,任何数字格式、日期计算等都应该事先完成并存储在您的模型对象上。这样,您只需将它们直接插入到您的单元格属性中,它们就可以显示出来了。在cellForRow 上花费的任何额外时间都会减慢您的tableview
  2. 将所有标签和视图设置为不透明。执行此操作时,您可能必须设置它们的背景颜色,但这会使绘制视图的速度更快。您可以通过在模拟器的调试菜单中打开“颜色混合图层”来查看哪些视图应用了透明度。你想要的是让你的细胞完全变绿。

【讨论】:

  • 我没有设置任何关于不透明度的内容,但我确实看到了红色区域,这对我来说很奇怪。那么标签和视图的默认值不是不透明的吗?将它们设置为不透明是什么意思? (哪个属性?)
  • 我尽我所能将 UILabel 设置为不透明(例如背景颜色 alpha 为 1,或 layer.opaque 为 1 等),但 UILables 仍然是红色区域。您能告诉我如何以编程方式“将所有标签和视图设置为不透明”吗?
  • 这个问题对你有帮助吗? stackoverflow.com/questions/8520434/…
  • 如果您仍有问题,请使用混合图层的一些屏幕截图更新您的问题,我会看看是否可以提供帮助。你也可以在 Interface Builder 的标签上设置这个 opaque 属性。
  • 最后我发现不是因为我做错了,而是如果文字是中文的,它总是红色的(苹果在上面加了一层)。我为此问了另一个问题:stackoverflow.com/questions/35308501/…
【解决方案2】:

默认情况下在所有标签中保留一些虚拟文本。更新文本不会消耗内存。 CoreText 非常昂贵,可能不适合这个!我认为虚拟文本技巧应该适合你。

希望这行得通。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-04-27
    • 1970-01-01
    • 1970-01-01
    • 2020-08-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多