iOS开发masonry动态布局cell高度

说到iOS自动布局,有很多的解决办法。有的人使用xib/storyboard自动布局,也有人使用frame来适配。对于前者,笔者并不喜欢,也不支持。对于后者,更是麻烦,到处计算高度、宽度等,千万大量代码的冗余,对维护和开发的效率都很低。

笔者在这里介绍纯代码自动布局的第三方库:Masonry。这个库使用率相当高,在全世界都有大量的开发者在使用,其star数量也是相当高的。

本文Cell内容通过Masonry自动布局并且cell巧妙利用自动布局计算cell动态高度

实现思路:例如cell中有 label1,label2,label3。

1、为label1添加约束 (以cell.contentView为基准)

    CGFloat one_W = SCREENWIDTH/2;

    [self.L1makeConstraints:^(MASConstraintMaker *make) {

        make.left.mas_equalTo(16);

        make.top.mas_equalTo (10);

        make.width.mas_lessThanOrEqualTo(one_W);e_W);

    }];

2、为label2添加约束 使其在label1下方距离为5处 (以label1为基准)。

    [self.L2makeConstraints:^(MASConstraintMaker *make) {

        make.left.equalTo(wself.L1.mas_left);

        make.top.equalTo(wself.L1.mas_bottom).offset(5);

        make.width.mas_lessThanOrEqualTo(one_W);

    }];

3、为label3添加约束 使其在label2 下方距离为5处 (以label2为基准,重点在于这个一定要在label3 添加一个距离cell。contentView底部的约束)。以上完成cell 子视图的约束。

    [self.L3 makeConstraints:^(MASConstraintMaker *make) {

        make.left.equalTo(wself.L1.mas_left);

        make.top.equalTo(wself.L2.mas_bottom).offset(5);

        make.width.mas_lessThanOrEqualTo(SCREENWIDTH-32);

        make.bottom.equalTo(wself.contentView.mas_bottom).offset(-10);

    }];


4、在tableView heightForRowAtIndexPath 代理中使用一个单独的不显示在屏幕的cell 作为计算cell高度使用,通过下面代码获取cell高度:

    customCell *cell= [customCellshareInstance];  

    //返回cell之前重新刷新约束,重新计算高度

    [cell setNeedsUpdateConstraints];

    [cell updateConstraintsIfNeeded];


    [cell setCellContent:self.data[indexPath.row]];

    [cell setNeedsLayout];

    [cell layoutIfNeeded];


    CGFloat height = [cell.contentViewsystemLayoutSizeFittingSize:UILayoutFittingCompressedSize].height;

    return height;


本文demo



  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值