iOS8 TableView 自动算高

在iOS8及以上系统中,可以使用AutoLayout来设置cell,使得内容 撑起 Cell,而只需要将tableView的rowHeight属性设置为UITableViewAutomaticDimension 自动计算,然后使用

- (CGFloat)tableView:(UITableView *)tableView estimatedHeightForRowAtIndexPath:(NSIndexPath *)indexPath {
return 50;
}

来设置一个估算的大致高度。

结果在最下

但我还是更习惯将行高缓存下来:
如果上面提到的你都做了,但是tableView:heightForRowAtIndexPath:的性能仍然慢的不可接受。非常不幸,你需要给行高做一些缓存(这是苹果的工程师们给出的改进建议)。大体的思路是,第一次计算时让自动布局引擎解析约束条件,然后将计算出的行高缓存起来,以后所有对该cell的高度的请求都返回缓存值。当然,关键还要确保任何会导致cell高度变化的情况发生时你都清除了缓存的行高——这通常发生在cell的内容变化时或其他重大事件发生时(比如用户调节了动态类型文本大小(Dynamic Type text size)的滑动条)。

坚持原创技术分享,您的支持将鼓励我继续创作!