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.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方法。
以上都是我個人實測結果,沒有理論依據支援,所以小心點看著用吧。