autolayout 动态计算高度时 UILabel的preferredMaxLayoutWidth设置

在计算cell的高度时,我们会使用如下方法:

    CGSize size = [self.cell.contentView  systemLayoutSizeFittingSize:UILayoutFittingCompressedSize ];

但如果里面有UILbel ,我们则需要设置UILabel的preferredMaxLayoutWidth。

如果label 的宽度是一定的,可以直接在自定义cell的代码里的

- (void)awakeFromNib {

}

方法里面填写,或者直接在xib里面设置。



但一般UILabel的宽度是不一定的,它会随着屏幕的变宽而变宽,于是,我们需要在下面的方法里面设置

-(void)layoutSubviews{

    [super   layoutSubviews];

     [self.contentView   layoutIfNeeded];

    [self.contentView  layoutSubviews];

    self.label.preferredMaxLayoutWidth =self.label.frame.size.width;

}

第二行的  要写   [ self.contentView layoutSubviews ]   [self.contentView   layoutIfNeeded];的原因; 是因为此layoutSubviews方法是cell 的,而label 是属于cell.contenView的,所以此时的label的宽度值还是xib上的宽度,并不是真正正确的宽度,所以需要多加上这一行。


最后,其实是最先,在生成self.cell 这个用来计算高度的cell时,采用以下方法

 self.cell = [self.tableView dequeueReusableCellWithIdentifier:@"bbTableViewCell"];

    self.cell.frame = [UIScreen mainScreen].bounds;

    [self.cell layoutIfNeeded];

要给cell.frame 赋值是因为(其实我也不知道为什么会这样,反正实测是这个样子)tableview还没有出现在界面的时候,cell的frame也是不对的,他的值还是xib里面的值,所以需要赋值。

然后layoutIfNeeded 是为了触发 cell的 layoutsubview方法。



以上都是我个人实测结果,没有理论依据支持,所以小心点看着用吧。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值