2013-08-05 17 views
2

我有一個UIView(「superview」),它有幾個UILabels作爲子視圖,在Interface Builder中設置。我已經打開了Auto-Layout,可以將列表中的所有標籤一個接一個地正確放置。這很好。如何使我的超級視圖大小與Autolayout的子視圖大小相匹配?

我現在要做的是讓它使我的Superview垂直調整大小以匹配我所有標籤的高度,但我無法完全弄清楚如何做到這一點。

這是如何工作的?

回答

-2

嘗試使用UIView方法sizeToFit

+0

當自動佈局打開時它工作嗎? – jbrennan

+0

不知道,但我是這麼認爲的。試試吧,讓我們知道:) –

+0

它什麼都不做。 – jbrennan

1

下面是使用可視化佈局的示例...因此忽略了translatesAutoresizingMaskIntoConstraints業務。

這依賴於容器視圖沒有任何高度約束的事實,它似乎依賴於視圖之間的間距。系統將調整視圖的大小以符合子視圖的要求。

- (instancetype)initWithFrame:(CGRect)frame 
{ 
    self = [super initWithFrame:frame]; 
    if (self) { 
     self.backgroundColor = [UIColor redColor]; 

     [self setTranslatesAutoresizingMaskIntoConstraints:NO]; 

     _labelOne = [[UILabel alloc] init]; 
     _labelOne.text = @"Banana"; 
     _labelOne.backgroundColor = [UIColor blueColor]; 
     [_labelOne setTranslatesAutoresizingMaskIntoConstraints:NO]; 

     _labelTwo = [[UILabel alloc] init]; 
     _labelTwo.text = @"Dinosaur"; 
     _labelTwo.backgroundColor = [UIColor yellowColor]; 
     [_labelTwo setTranslatesAutoresizingMaskIntoConstraints:NO]; 

     [self addSubview:_labelOne]; 
     [self addSubview:_labelTwo]; 

     NSDictionary *views = NSDictionaryOfVariableBindings(_labelOne, _labelTwo); 
     [self addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|[_labelOne]|" options:0 metrics:nil views:views]]; 
     [self addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|[_labelTwo]|" options:0 metrics:nil views:views]]; 
     [self addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|-10-[_labelOne(30)]-15-[_labelTwo(30)]-10-|" options:0 metrics:nil views:views]]; 
    } 
    return self; 
} 
+0

嗯,這是很好的,但問題是標籤高度可以改變,因爲他們有多條線啓用(我想我應該在我的問題中提到這一點)。仍然試圖繞着我的腦袋做這項工作,同時保持底部填充。 – jbrennan

+0

你可以改變固定的'30'高度作爲例子> = 30,這將至少允許擴大視圖。 不能100%確定如何提前觸發sizeToFit。 – Malaxeur

0

我知道基本的想法是讓你的子視圖的內在含量的大小通過確保在每個子視圖的垂直維中的內容壓縮性和內容擁抱約束沒有被覆蓋帶動上海華盈的高度您已添加更高優先級的約束。

相關問題