首先说下,我不确定别的环境下有没有问题,但我这确实有问题,没有时间去探索到底是snapkit的坑,还是哪里的问题。
说下描述,一般我们在ios8以上可以很自由的使用autolayout解决动态高度的问题,ios7一般要这么搞:
func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat { /// TODO Cache if let msg = getTIMMessageInSection(indexPath.section, row: indexPath.row) { if let cell = tableView.dequeueReusableCellWithIdentifier(getIdentifierByMessage(msg)) as? TTGroupChatCell { bindData(cell, msg: msg) return cell.systemLayoutSizeFittingSize(UILayoutFittingCompressedSize).height + 1 } } return 0 } }
但是在我的环境下,神奇的发现,不管cell怎么搞,这个计算的值总是0。。。。
最后在cell里面搞了这么一个方法:
func calculateHeightRoughly() -> CGFloat { return contentView.systemLayoutSizeFittingSize(UILayoutFittingCompressedSize) }
然后神奇的发现可以了。。即在外面替换成:
func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat { /// TODO Cache if let msg = getTIMMessageInSection(indexPath.section, row: indexPath.row) { if let cell = tableView.dequeueReusableCellWithIdentifier(getIdentifierByMessage(msg)) as? TTGroupChatCell { bindData(cell, msg: msg) return cell.calculateHeightRoughly() } return 0 } }
是在不知道啥原理。。
PS,UILabel如果不能换行的话,要设置如下的:
label.preferredMaxLayoutWidth = 200
注意200是一个一定要比屏幕宽度小的值,这样才能换行。