在计算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.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方法。
以上都是我个人实测结果,没有理论依据支持,所以小心点看着用吧。