在使用了AutoLayout後,一些主動調整高度的控件,如UIImageView, UILabel,UIButton等,不會在更新(updateConstraintsIfNeeded)後,獲取到frame,這時候獲取到的frame還是上一次的frame,實驗了好久,終於找到方法了。
如果你的是UIViewController,每次更新後會調用 viewDidLayoutSubviews 方法,我們可以在這裏計算更新後的高度,如:
- (void)viewDidLayoutSubviews {
[super viewDidLayoutSubviews];
NSLog(@"%@", _contenLabel);
[_scrContainViewHeightConstaint setConstant:CGRectGetMaxY(_contenLabel.frame)];
[_scrContaintView updateConstraintsIfNeeded];
}
如果你用的是UIView,我們可以在 layoutSubviews 方法計算更新後的高度, 如:
-(void)layoutSubviews {
[super layoutSubviews];
[self setNeedsLayout];
[self layoutIfNeeded];
NSLog(@"%@", _contenLabel);
[_scrContainViewHeightConstaint setConstant:CGRectGetMaxY(_contenLabel.frame)];
[_scrContaintView updateConstraintsIfNeeded];
}