2016-09-16 2 views
2


У меня есть UIView, который содержит два UILabels, которые имеют динамические высоты. Я хочу, чтобы UIView соответствовал размеру UILabels + некоторых дополнений. Прямо сейчас я рисую ярлыки, а затем устанавливает ограничения ширины и высоты UIView на объединенный размер меток.

Прямо сейчас я делаю это:Установите размер UIView для соответствия subViews

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

Вы можете сделать это, используя раскадровку.

Установите нижнее ограничение View на вторую UIlabel. Поэтому, когда высота метки увеличивается, высота UIView также увеличивается.

enter image description here

enter image description here

+0

Он отлично работает :) Спасибо! – NikMos

0

@Girish M ответ является правильным. Просто для уточнения. Установите ограничение верхней метки на верхнее, вертикальное расстояние между двумя метками и нижнее ограничение между нижней меткой и UIView. Не устанавливайте ограничений по высоте.

В качестве альтернативы, если вы хотите немного больше контролировать высоту UILabels, вы можете добавить ограничения высоты в раскадровку для этикеток и создать точки для них в своем коде. Выполните этот код при изменении текста меток.

label1.sizeToFit() 
    label2.sizeToFit() 

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

    view.layoutSubviews() 
Смежные вопросы