2016-09-16 4 views
2


動的な高さを持つ2つのUILabelを含むUIViewがあります。私は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をUILabelに合わせる方法ではなく、テキストに合わせてUILabelを作成する方法に関するものです。 – NikMos

+0

申し訳ありませんが、それは助けにはなりませんでした、私はすぐに自分自身を試して、答えを追加しました。 –

答えて

12

ストーリーボード自体を使用して行うことができます。

ビューの下部制約を2番目のUIlabelに設定します。したがって、ラベルの高さが増加すると、UIViewの高さも増加します。

enter image description here

enter image description here

+0

それは完璧に動作します:)ありがとう! – NikMos

0

@Girish Mの答えは正しいです。ただ明確にする。トップラベルの制約を、2つのラベル間のビューの上、縦、およびボトムラベルとUIViewの間の下限制約に設定します。高さの制約を設定しないでください。

また、UILabelsの高さをさらに細かく制御したい場合は、ラベルのストーリーボードに高さの制約を追加し、コード内に高さの制約を作成することができます。ラベルのテキストを変更するときにこのコードを実行します。

label1.sizeToFit() 
    label2.sizeToFit() 

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

    view.layoutSubviews() 
関連する問題