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

标签 ios swift uitableview

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

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

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

Now the problem comes. Whenever I am dequeueing the cells there is a kind of a small jerk that gives me an indication that my cell is dequeued while scrolling.

我怎样才能使这些移动平滑,以便在 ScrollView 时不会出现抖动?

正在分配高度,并根据当前加载的数据类型获取值。

estimatedRowForIndexPath

另外,我正在从我的 cellForAtindexPath 中调用 layoutIfNeeded

欢迎提出建议。

最佳答案

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

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

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

单元格是否包含图像?

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

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

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

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

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

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

关于ios - 滚动时 UITableViewCell 自动布局抖动的动态单元格高度问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33849075/

相关文章:

ios - Swift 中对象数组的持久存储

ios - 在 Master-Detail 应用程序中为 Master/Detail View Controller 重用 UIViewController(带有 UITableView)?

ios - UIModalTransitionStylePartialCurl 导致 UIButton 文本动画

iOS 应用程序在 calendar.dateComponents 上崩溃

ios - 如何检测何时点击注释的 UICalloutView?

objective-c - 我在 info.plist 中的 NSAppTransportSecurity 设置不适用于所有定义的域和子域

ios - 无法在没有错误的情况下在自定义 UITableView 上添加 UIButton

ios - FetchedResultsController 和自定义 header 部分的数据

ios - Swift - iOS10 - CoreData - Today Widget 中的 FetchRequest 总是返回 0 个元素

ios - 复制 UIAlertView 时;背景不一样