【问题标题】:Autolayout self-sizing cells and UITableView stuttering/jiggling自动布局自动调整大小的单元格和 UITableView 口吃/抖动
【发布时间】:2015-06-29 21:10:20
【问题描述】:

学习使用自动布局计算动态表格视图单元格高度的有效方法。遇到滚动表格视图时的问题,它开始有点卡顿,这很烦人。有时向上滚动时会卡顿很多,但这可能与我的演示核心数据代码有关。

This 视频演示了这个问题。示例项目位于github 存储库(请参阅SZNewsFeedViewController)。

单元格的布局很简单:

我的第一个猜测是在模拟器中查看混合图层,但这很好:

如果我注释掉图像设置,口吃不会消失,所以,这可能不是真正的原因。我使用FastImageCache 异步设置图像。我想我可以观察主动滚动并跳过图像设置,直到它完全停止,但我不确定这是否真的有帮助。

return 250 替换tableView:heightForRowAtIndexPath: 代码也不能完全解决问题。

现在我更改了带有图片的帖子的高度约束常量,将为纯文本帖子和图片帖子尝试单独的单元格。

你能指出我,什么可能导致这种口吃,我可以尝试更多的方法来解决它吗?我的布局或高度计算代码有什么问题? 是否有任何适当的方法可以在后台线程中预先计算高度(与systemLayoutSizeFittingSize 返回的值相同)并将其保存到核心数据模型,以便能够快速重用这些值?

编辑:分析器说高度计算需要大部分时间:

UPD: 好的,似乎单独的单元格 + 高度缓存是一个更好的解决方案——tableview 的抖动少了一点。此外,tableView:estimatedHeightForRowAtIndexPath: 似乎更有害而不是有用。删除此方法也可以消除更多的抖动。我发现在上述方法之后,[collectionview reloadData] 调用影响最大 - 删除此调用几乎不会导致抖动。我将尝试静态图像视图 + 观察活动滚动以确定这是否不会导致抖动。

【问题讨论】:

  • 在假设问题出在自动布局而不是您的代码之前,您必须运行时间分析器以查看哪些方法花费的时间最多。然后,您可以根据实际数据选择要优化的内容。
  • 附上profiler的截图。没有什么比计算高度更耗费时间了。
  • 什么是[SZNewsFeedViewController configureCell:atIndexPath:isOffScreen:],签名在您的行高方法中,参数“isOffScreen”听起来像是您正在处理每个单元格的内容?
  • 此方法主要设置标签文本。没有硬计算,您可以在示例项目的source code 中看到
  • 我也在为这些问题苦苦挣扎,你会做什么而不是estimatedHeightForRowAtIndexPath?我有一个问题,没有设置会导致表格视图在从底部滚动到顶部时跳来跳去。

标签: ios objective-c uitableview autolayout


【解决方案1】:

看起来您仍在实现 heightForRow:atIndexPath: 并且没有使用 UITableViewAutomaticDimension。

【讨论】:

  • 1.项目是ios7+,UITableViewAutomaticDimension只有ios8+。 2. 试过了,真的没用
猜你喜欢
  • 2014-04-29
  • 1970-01-01
  • 1970-01-01
  • 2015-03-20
  • 1970-01-01
  • 2014-02-08
  • 1970-01-01
  • 2016-08-21
  • 1970-01-01
相关资源
最近更新 更多