根据label的不同高度,cell自适应

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都可以自动化适配。不在需要计算回传到代理去从新适配。

推荐阅读更多精彩内容