動的な高さを持つ2つのUILabelを含むUIView
を持っています。 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。
@Girish Mの答えは正しいです。明確にするだけです。上部ラベルの制約をビューの上部、2つのラベル間の垂直間隔、下部ラベルとUIView間の下部制約に設定します。高さの制約を設定しないでください。
または、UILabelsの高さをもう少し制御したい場合は、ラベルのストーリーボードに高さの制約を追加し、コードでそれらのアウトレットを作成できます。ラベルのテキストを変更するときにこのコードを実行します。
label1.sizeToFit()
label2.sizeToFit()
label1HeightConstraint.constant = label1.frame.size.height
label2HeightConstraint.constant = label2.frame.size.height
view.layoutSubviews()