学习使用autolayout计算动态tableview单元格高度的有效方法。在滚动表视图时遇到问题,它开始有点卡顿,这非常烦人。滚动时有时会出现很多问题,但这可能与我的演示核心数据代码有关。
This视频演示了此问题。示例项目位于github存储库(请参阅SZNewsFeedViewController)。
细胞的布局非常简单:
我的第一个猜测是在模拟器中查看混合图层,但它很好:
如果我注释掉图像设置,口吃不会消失,所以,这可能不是真正的原因。我用FastImageCache异步设置图像。我想我可以观看主动滚动和跳过图像设置,直到它完全停止,但我不确定这是否真的有用。
用tableView:heightForRowAtIndexPath:
替换return 250
代码并不能完全解决问题。
现在我更改了带图像的帖子的高度约束常量,会为纯文本帖子和图片帖子尝试单独的单元格。
你能指出我,可能导致这种口吃的原因,我可以尝试更多解决方法吗?我的布局或高度计算代码出了什么问题?
是否有任何适当的方法在后台线程中预先计算高度(与systemLayoutSizeFittingSize
返回相同的值)并将其保存到核心数据模型,以便能够快速重用这些值?
编辑:探查者说高度计算占用了大部分时间:
UPD :
好吧,看起来像一个单独的细胞+高度缓存是一个更好的解决方案 - tableview稍微摇摆不定。此外,tableView:estimatedHeightForRowAtIndexPath:
似乎更有害,然后有帮助。删除此方法也会消除抖动。我发现在上述方法之后,[collectionview reloadData]
调用影响最重要 - 删除此调用几乎不会导致抖动。我将尝试静态图像视图+观看活动滚动以确定这是否会导致抖动。
答案 0 :(得分:0)
看起来你仍在实现heightForRow:atIndexPath:并且没有使用UITableViewAutomaticDimension。