设置UIView大小以适合子视图

时间:2016-09-16 08:29:08

标签: ios swift uiview autolayout uilabel

我有一个UIView,其中包含两个UILabel,它们具有动态高度。我希望UIView符合UILabels的大小+一些填充。现在我正在绘制标签,然后将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。

2 个答案:

答案 0 :(得分:25)

您可以使用故事板本身来完成。

将View的底部约束设置为第二个UIlabel。因此,当标签的高度增加时,UIView的高度也会增加。

enter image description here

enter image description here

答案 1 :(得分:2)

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

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

    label1.sizeToFit()
    label2.sizeToFit()

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

    view.layoutSubviews()