AutoLayout適配時,如何獲得AutoLayout完成適配後的子控件的真實frame

在使用了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];

}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章