【问题标题】:iOS UITableViewCell OptimizationiOS UITableViewCell 优化
【发布时间】:2012-02-29 14:53:53
【问题描述】:

在我的应用程序中,我有一个包含自定义 UITableViewCells 的 UITableView。滚动非常缓慢和滞后,我需要解决这个问题。

每个单元格包含 5-6 个标签、几个按钮和一张图片。

我有一个单元格的 xib,我在其中放置按钮、标签和图像视图,但我在 cellForRowAtIndexPath 中设置了所有图像。要加载我使用 [UIImage imageNamed:@""] 的图像,我阅读它更适合优化。我也是重用细胞。

我还发现,即使我注释掉并且不设置图片,表格仍然是滞后的,只有带有文本的标签。

有没有人对如何拥有一个相当复杂的表格单元格同时保持良好、流畅的性能有任何建议?将自定义单元格作为 xib 会影响性能吗?

【问题讨论】:

  • 看看你的tableview:cellForRowAtIndexPath: 实现会很有帮助。

标签: iphone ios uitableview smooth-scrolling


【解决方案1】:
  1. 确保您确实在重复使用单元格。确保单元格 您正在使用的标识符在 UITableViewCell 的 XIB 中设置 在界面生成器中。

  2. 在子视图中使用较低的透明度。如果可能的话,进入你的标签并确保它们的背景与单元格的背景匹配。

  3. 检查未优化的代码。例如,如果您正在显示一个格式化的日期,并且每次调用 tableview:cellForRowAtIndexPath: 时都创建一个 NSDateFormatter 的实例,那么这将真的让您的应用陷入困境。

  4. 将 Instruments 与 Timing 和 Core Animation 模块一起使用,以查找大部分时间都花在了哪里。最终,这些可以揭示真正的性能问题所在。

【讨论】:

  • 我实际上意识到我从未设置 xib 中标识的单元格,所以一旦我这样做了,没有图像的滚动现在非常流畅。我还将标签设置为纯色而不是透明的。就像我现在说的那样,在不加载 1 UIImageView 的情况下,单元格会平滑滚动,但是当我将图像放回原处时,它的滚动会有点滞后,但几乎没有以前那么多。谢谢!
  • 我也在计算我的 cellForRowAtIndexPath: 中的日期,我也将把它移出并在加载表格之前获取这些日期。
  • 您知道NumberFormatter 是否与NSDateFormatter 具有相同的性能影响吗?
  • @CSjunkie 我希望性能问题是相同的,但您也可以分析此仪器以获得明确的答案。我可能会在最旧的受支持设备上执行此操作,以获得最坏的情况图片。
【解决方案2】:

实现一个自定义的UITableViewCell 子类并在drawRect: 中一个不透明的UIView 上进行自己的绘图。

这样做会大大加快滚动速度。

【讨论】:

    【解决方案3】:

    在 IB 中将一些属性设置为 NO。

    在滚动条中,将“水平滚动”设置为 NO。 在 Touch 中,将“Delay content touches”和“Cancelable content touches”设置为 NO

    它将使您的表格视图平滑滚动

    【讨论】:

    • 谢谢,我将所有这些都设置为“否”,这似乎有点帮助,谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-29
    • 1970-01-01
    • 2023-03-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多