如何提高表视图中的 UILabel 性能?

Posted

技术标签:

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

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

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

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

编辑:

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

【问题讨论】:

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

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

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

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

【讨论】:

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

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

希望这行得通。

【讨论】:

以上是关于如何提高表视图中的 UILabel 性能?的主要内容,如果未能解决你的问题,请参考以下文章

我如何使用视图和索引来提高性能

如何以编程方式将 UILabel 和 UiImageView 添加到表视图单元格内的 UIView?

根据选定的表视图行更新 UILabel

使用视图提高查询性能

如何在表视图中正确设置动态标题视图?

提高视图的性能