2013-11-09 260 views
4

使用自動佈局我正在開發一個包含UILabel的容器UIView。我想根據UILabel的高度動態調整容器視圖的高度。Autolayout,視圖高度取決於子視圖高度

我在容器視圖中添加了這些約束,但我不知道如何判斷UILabel的高度,因爲它是多行UILabel。

- (void) updateConstraints{ 

[self removeConstraints:self.constraints]; 

NSDictionary *views = NSDictionaryOfVariableBindings(_informationLabel); 

// -- Constraints 

[self addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|-5-[_informationLabel]-5-|" 
                  options:0 
                  metrics:@{} 
                   views:views]]; 

[self addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|-5-[_informationLabel]-5-|" 
                  options:0 
                  metrics:@{} 
                   views:views]]; 
[super updateConstraints];} 

我試着boundingRectWithSize計算的高度和發送度量字典裏面的高度。

在視圖控制器我還沒有指定容器視線的高度讓它根據子視圖的高度調整:

[constraints addObjectsFromArray:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|-100-[_informationView]" 
                     options:0 
                     metrics:@{} 
                      views:views]]; 

[constraints addObjectsFromArray:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|-[_informationView]-|" 
                     options:0 
                     metrics:@{} 
                      views:views]]; 

我怎樣才能使容器視圖高度成長爲的UILabel高度有增長?

+0

容器視圖應該自動調整到適當的高度取決於的UILabel。你確定你已經把標籤作爲容器的子視圖嗎?也許發表更多的代碼如何設置所有的視圖 – Axadiw

+0

是的我很確定視圖是在容器視圖中,我打印所有的子視圖,我可以看到它,雖然幀是(0,0,0,0 )。 – fjbelchi

+0

你是否將所有視圖的'translatesAutoresizingMaskIntoConstraints'設置爲'NO'? – Axadiw

回答

1

多行文字的intrinsicContentSizeUILabel & NSTextView)不明確。這是因爲高度取決於尚未計算的寬度。爲了解決這個問題,你必須先允許佈局的第一遍,然後設置新增的屬性preferredMaxLayoutWidth,它特別解決了這個問題。

// Inside superview 
- (void)layoutSubviews 
{ 
    [super layoutSubviews]; 
    self.informationLabel.preferredMaxLayoutWidth = self.informationLabel.frame.size.width; 
    [super layoutSubviews]; 
} 

來源:http://www.objc.io/issue-3/advanced-auto-layout-toolbox.html