比如要用一个Label显示标题,但是标题可能是多行也可能是一行。那么可以通过计算添加了对应文字的label的高度,来更新cell的高度。
1.首先要获取当前tableView用来展示的数据。
对应V2里的topicList变量。topicList是一个数组,其中每个元素对应一个cell。
2.在heightForRowAt方法里创建一个label,这个label的属性设置要和用于展示cell数据的label一样。现在我们根据indexPath.row来获取对应的标题数据,然后把标题数据添加到label后,计算label的高度。获取的高度就是动态高度了。
func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
let topicModel = self.topicList?[indexPath.row]
let title = topicModel?.topicTitle
//cell自适应
let label = UILabel()
label.font = UIFont.systemFont(ofSize: 18)
label.text = title
label.numberOfLines = 0
let height = label.sizeThatFits(CGSize.init(width: tableView.frame.size.width - 12, height: 9999)).height
// 上间隔 头像高度 头像下间隔 标题高度 标题间隔 cell间隔
return 12.0 + 35 + 12 + height + 12 + 8
}