调整UITableViewCell的大小以适应内容性能

时间:2014-07-31 19:11:14

标签: ios uitableview

我正在尝试创建一个表来显示可能具有可变长度的用户的帖子。我希望我的表中的每个单元格都可以调整大小以适应包含帖子文本的UILabel的内容。目前我正在使用自动布局,以编程方式设置约束并根据UILabel的高度计算表格视图单元格的高度。一切看起来都像我想要的那样,除非快速滚动表格时性能非常糟糕,CPU完全消失,无法跟上设置每个单元格的约束,因为它们被重复使用并放置新文本。 / p>

我想知道是否有人知道更好的方法来做到这一点。有没有办法可以继续使用自动布局来调整我的单元格而不牺牲性能?或者最好的解决方案是创建具有不同标识符的不同大小的单元格,并根据UILabel文本大小选择最合适的单元格。 我还在某处读到UICollectionView在显示可变大小的内容方面有更好的性能,是否值得/可能尝试配置UICollectionView来显示消息,并以某种方式使它看起来像UITableView?

基本上我只需要一个关于如何以类似TableView的方式显示可变大小的消息(最多大约7或8行文本最大值)的建议,而不会在用户快速滚动表格时造成大幅减速。

谢谢

2 个答案:

答案 0 :(得分:1)

本书中最好的技巧就是缓存。将任何昂贵的计算内容添加到模型中(不是视图本身,而是计算结果,如视图边界大小)。将您的数据源方法全部用于查找和分配,而不是计算。

答案 1 :(得分:0)

我实施添加约束的方式,每当调用[self updateViewConstraints]时,约束都会更新,无论单元格是否已经计算并应用了约束。我通过向我的自定义TableViewCell添加一个名为didUpdateConstraints的BOOL属性来解决这个问题,并在第一次更新约束时将其设置为YES。然后在我的[self updateViewConstraints]方法中,我只更新!self.didUpdateConstraints

时的约束

现在,当所有视图都已被正确约束时,约束不会被不必要地更新,性能明显更好,而且在滚动表格时我没有观察到任何减速。