我正在尝试做一些事情,比如在 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/