1.手动计算
适用于纯代码,根据model里面的数据,用一堆if else 判断 加 文字高度计算 来获得每一行cell的总体高度,比如像微博列表
需要计算富文本高度+根据图片个数计算高度+根据是否存在卡片+地理位置等,依次增加对应的高度
此方法,很麻烦,漏写或情况很多的时候容易出错,不做高度缓存的话,会存在卡顿情况
但也是最稳定靠谱的计算方法 ,可以利用 "sizeThatFits"
CGSizeretSize = [_personInfoSignView.desLabel sizeThatFits:CGSizeMake(SCREEN_WIDTH-30,CGFLOAT_MAX)]; 准确得到高度
2.利用FDTemplateLayoutCell
是github开源库forkingdog的
具体介绍如下: http://blog.sunnyxx.com/2015/05/17/cell-height-calculation/
已经封装的很好了,适用于xib
做好xib约束,用此库计算cell的高度,其中需要注意的一点是label的高度自适应需要增加一句代码: self.testLabel.preferredMaxLayoutWidth = [UIScreen mainScreen].bounds.size.width - 30;
或者xib上勾选上如下的对勾:
比如 一个"更多"按钮,点击可以显示所有的label上的文字,实现方法很简单:heightForRowAtIndexPath如下写 :
return [tableView fd_heightForCellWithIdentifier:MyJianCellIdentifier configuration:^(CourseIntroduceCell *cell) {
[cell smk_configure:cell model:model indexPath:indexPath];//cell 赋值model
}];
按钮的点击方法点击更改 label的numberOfLines = 0, 就可以实现了,展开全文,收起全文了。
工程中实际应用时,需要用model来记录下 每行cell的 numberOfLines 即可。
还有一篇文章参考,关于tableView的流畅度的(FPS=60) 优化的,写的不错http://blog.csdn.net/songchunmin_/article/details/52781691