滚动时 UITableViewCell 自动布局抖动的动态单元格高度问题

Posted

技术标签:

【中文标题】滚动时 UITableViewCell 自动布局抖动的动态单元格高度问题【英文标题】:Dynamic cell height issue with UITableViewCell autolayout jerk while scrolling 【发布时间】:2015-11-21 22:00:02 【问题描述】:

我正在尝试做一些事情,比如在 uitableview 中加载具有自定义高度的不同类型的单元格。表格视图单元格是子类的,由具有相应约束的标签组成。每个单元格都有一个动态高度。

现在甚至在我的表重新加载数据之前,我正在计算调整单元格大小所需的高度并将其缓存在我的模型类中,这样我就不必在设备上呈现数据时计算高度.

要计算高度,我确实使用了 Ray Wenderlich 的教程,并且我将正确的高度集应用于对象。

现在问题来了。每当我使细胞出队时,都会有一个 有点像一个小混蛋,它给了我一个迹象,表明我的细胞是 滚动时出队。

我怎样才能使这些运动平滑,以便在滚动视图时不会出现抖动?

高度被分配并根据当前加载的数据类型获得值。

estimatedRowForIndexPath

我也从我的 cellForAtindexPath 调用 layoutIfNeeded

欢迎提出建议。

【问题讨论】:

我也面临同样的问题..请任何人帮助我。 【参考方案1】:

很难说没有在 cellForRowAtIndexPath 中看到您的代码,也没有看到您的单元格及其各自的代码。以下是我将调查的一些一般性问题:

单元格的内容是什么,单元格中的视图层次结构有多复杂?

即使您提供了正确的估计高度,仍然需要进行自动布局传递,并且复杂的视图层次结构需要时间来解决

单元格是否包含图像?

需要从文件 (UIImage imageNamed:) 解压缩的图像可能会很密集并导致滚动问题,请检查图像是否大于所需大小。如果需要,将这项工作放到后台线程上。

您是否正在调用复杂的方法来配置单元格以在cellForRowAtIndexPath 中显示?

查看cellForRowAtIndexPath 中实际完成的工作,是否在您的单元子类或视图模型中触发了复杂的方法?

您是否正在向cellForRowAtIndexPath 中的单元格视图层次结构添加和删除视图?

如果在单元配置期间添加、删除、创建、从 xib 膨胀、约束等视图,这可能会减慢速度。尝试只做严格需要的事情。检查在cellForRowAtIndexPath 期间是否有任何代码在单元子类内部运行,这些代码可以移动到单元格initWith... 或awakeFromNib 方法(即,在创建单元格时可以只运行一次的代码,而不是每次显示单元格时)

同时运行 Instruments 时间分析器,看看是否能提供更多线索

【讨论】:

非常感谢@P-double 的建议。将尝试根据提出的建议检查我的代码,看看性能是否有一些改进 没问题,如果你想在这里或通过 github 与我分享一些代码,我也可以看看

以上是关于滚动时 UITableViewCell 自动布局抖动的动态单元格高度问题的主要内容,如果未能解决你的问题,请参考以下文章

出队的 UITableViewCell 在滚动之前布局不正确(使用自动布局)

UITableViewCell 扩展自动布局

自定义 UITableViewCell 的布局何时完成?

UITableView 滚动时奇怪的布局行为变化

向下滚动并返回时 UITextField 进入 UITableViewCell 自动重置?

iOS UITableViewCell 内容在第一次滚动时移动