1、cell用CGRectMake布局:需要sizeThatFits这个方法。
-(CGSize)sizeThatFits:(CGSize)size{
CGFloat totalHeight = 5;
totalHeight +=[self.user_name_lable sizeThatFits:size].height;
totalHeight +=[self.comment_content_lable sizeThatFits:size].height;
totalHeight +=[self.comment_time_lable sizeThatFits:size].height;
return CGSizeMake(size.width, totalHeight);
}
cell里代码写UI,写了三个label,其中comment_content_label需要设置
_comment_content_lable.numberOfLines=0;
[_comment_content_lable sizeToFit];
以上的设置,就是告诉cell三个控件的高度。
如果使用masonry布局,sizeThatFits也不用写直接这样:
[_comment_content_lable mas_makeConstraints:^(MASConstraintMaker *make) {
make.top.offset(10);
make.left.offset(10);
make.right.offset(-10);
make.bottom.offset(-10);
}] ;
在tableview只需写入两行代码,
_tableView.estimatedRowHeight = 0.5 * kScreenWidth;
_tableView.rowHeight = UITableViewAutomaticDimension;
第一行是告诉tableview大概宽度,第二行就是自适配。
2、cell用xib搭建
用xib加约束和用masonry加代码约束都是可以的。注意约束一定要自上而下加好,让系统知道怎么去计算高度。
DE878418-5775-4990-9FA2-360DC704B312.png
中间的label约束高度设置大于等于,cell内部的控件约束一定从上到下都设置好。
tableview里设置还是那两行
_tableView.estimatedRowHeight = 0.5 * kScreenWidth;
_tableView.rowHeight = UITableViewAutomaticDimension;
这样不论是xib的cell还是代码布局,cell都可以自动化适配。不在需要计算回传到代理去从新适配。
网友评论