2016-09-16 59 views
2


我有一个UIView它包含两个UILabels,它们具有动态高度。我想UIView适合UILabels +一些填充的大小。现在我正在绘制标签,然后将UIView的宽度和高度约束设置为标签的组合大小。

现在我这样做:设置UIView大小以适合子视图

func populateWithMessage(headline: String?, message: String) { 
    // Sets text 
    self.headerLabel.text = headline 
    self.messageLabel.text = message 

    self.headerLabel.sizeToFit() 
    self.messageLabel.sizeToFit() 

    self.layoutSubviews() 

    // Finding the label with the greatest width 
    var longestLabel: UILabel! 
    if self.headerLabel.frame.width > self.messageLabel.frame.width { 
     longestLabel = self.headerLabel 
    } else { 
     longestLabel = self.messageLabel 
    } 

    let combinedLabelHeight = self.headerLabel.frame.height + self.messageLabel.frame.height 

    // Update the container view's constraints 
    self.containerViewWidtConstraint.constant = longestLabel.frame.width + 10 
    self.containerViewHeightConstraint.constant = combinedLabelHeight + 10 

    self.updateConstraints() 
} 

遗憾的是它不工作: -/

任何想法,我将非常感激!

我正在使用Swift 2.3和Autolayout。

+0

这个答案可能是有用的http://stackoverflow.com/questions/16009405/uilabel-sizetofit-doesnt-work-with-autolayout-ios6 –

+0

谢谢您的回答,但据我所知,这个问题是关于如何使UILabel适合它的文本,而不是如何使UIView适合UILabel。 – NikMos

+0

对不起,它没有帮助,我很快尝试了自己,并添加了一个答案。 –

回答

12

你可以使用故事板本身。

将视图的底部约束设置为第二个UIlabel。所以当标签的高度增加时,UIView的高度也会增加。

enter image description here

enter image description here

+0

它完美的作品:)谢谢! – NikMos

0

@Girish中号的答案是正确的。只是为了澄清。将顶部标签的约束设置为视图的顶部,两个标签之间的垂直间距以及底部标签和UIView之间的底部约束。不要设置任何高度限制。

或者,如果您想更多地控制UILabels的高度,可以在故事板中为标签添加高度约束,并在代码中为它们创建出口。更改标签文本时执行此代码。

label1.sizeToFit() 
    label2.sizeToFit() 

    label1HeightConstraint.constant = label1.frame.size.height 
    label2HeightConstraint.constant = label2.frame.size.height 

    view.layoutSubviews() 
相关问题