J'ai un UIView
qui contient deux UILabels, qui ont des hauteurs dynamiques. Je veux que le UIView
s'adapte à la taille des UILabels + du rembourrage. En ce moment, je dessine les étiquettes, puis définit les contraintes de largeur et de hauteur de UIView sur la taille combinée des étiquettes.
En ce moment, je fais ceci:
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()
}
Malheureusement ça ne marche pas: - /
Toutes les idées seront très appréciées!
J'utilise Swift 2.3 et Autolayout.
La réponse @Girish M est correcte. Juste pour clarifier. Définissez la contrainte de l'étiquette supérieure sur la vue supérieure, l'espacement vertical entre les deux étiquettes et une contrainte inférieure entre l'étiquette inférieure et UIView. Ne définissez aucune contrainte de hauteur.
Alternativement, si vous voulez un peu plus de contrôle sur les hauteurs des UILabels, vous pouvez ajouter des contraintes de hauteur dans le storyboard pour les étiquettes et créer des sorties pour elles dans votre code. Exécutez ce code lors de la modification du texte des étiquettes.
label1.sizeToFit()
label2.sizeToFit()
label1HeightConstraint.constant = label1.frame.size.height
label2HeightConstraint.constant = label2.frame.size.height
view.layoutSubviews()