自动布局下的自定义行高约束问题

   昨天晚上被自动布局里自定义行高磨了一晚上,简直快要疯掉。我是利用Masonry来进行自动布局的,布局很简单,就是cell里面放两个label,可是,在我添加完约束之后,控制台就会打印一大堆东西,约束是这样的:

  _titleLab.font = [UIFont systemFontOfSize:28*TTScreenWith/640];

    [_titleLab mas_makeConstraints:^(MASConstraintMaker *make) {

        make.centerY.mas_equalTo(self.contentView.mas_centerY);

        make.left.equalTo(self.contentView.mas_left).with.offset(15);

        make.top.equalTo(self.contentView.mas_top).with.offset(15);

        make.bottom.equalTo(self.contentView.mas_bottom).with.offset(-15);

        make.right.equalTo(self.infoLab.mas_left).with.offset(-15);

    }];

 

    _infoLab.numberOfLines = 0;

    _infoLab.lineBreakMode = NSLineBreakByCharWrapping;

    _infoLab.font          = [UIFont systemFontOfSize:24*TTScreenWith/640];

    [_infoLab mas_makeConstraints:^(MASConstraintMaker *make) {

        make.centerY.mas_equalTo(self.contentView.mas_centerY);

        make.left.equalTo(self.titleLab.mas_right).with.offset(15);

        make.top.equalTo(self.contentView.mas_top).with.offset(15);

        make.bottom.equalTo(self.contentView.mas_bottom).with.offset(-15);

        make.right.equalTo(self.contentView.mas_right).with.offset(-15);

           }];

     如上约束,在不动态增加高度的情况下是完全没有问题的,而我使用了动态增加行高的方法之后问题就来了。想来想去,回头看看我加的约束,中心为cell的中心,距离上边距15,下边距15,但此时tableview的代理方法里面heightForRow写着

 [cell setNeedsUpdateConstraints];

            [cell updateConstraintsIfNeeded];

            cell.bounds = CGRectMake(0.0f, 0.0f, CGRectGetWidth(tableView.bounds), CGRectGetHeight(cell.bounds));

            [cell setNeedsLayout];

            [cell layoutIfNeeded];

            CGFloat height = [cell.contentView systemLayoutSizeFittingSize:UILayoutFittingCompressedSize].height + 1;

            return height;

此时先执行cell里面的约束,在没有对cell进行赋值的情况下height是为1的,好吧,此时它们俩冲突了,最后想来想去,解决办法就是给tableview一个预估的高度,这样保证了约束不与行高冲突.我给的预估高度是

[UIScreen mainScreen].bounds.size.width*60/320

成功~~~~~

你可能感兴趣的:(自定义)