2016-04-17 4 views
3

ビュー内にボタンがあります。私はインターフェイスビルダーで自分のボタンの画像を設定しました。私はインターフェイスビルダーで私のボタンに追加した 制約がある:I NSLog myBtn.constraintsのときに追加の制約が記録される

右スペース= 10

下のスペースは、スーパーする> = 10

をスーパーする= 10

トップのスペースをスーパーしますスペースをラベルに残す> = 10

すべてのことがうまく動作し、レイアウトに問題はありません。 しかし、私はこのコードでボタンの制約ログインしたとき:

NSLog(@"constraints for btnBack is: %@", self.btnBack.constraints); 

コンソールログ:

constraints for btnBack is:(

"<NSContentSizeLayoutConstraint:0x7c35c400 H:[UIButton:0x7c3588a0(102)] Hug:250 CompressionResistance:750>" 

"<NSContentSizeLayoutConstraint:0x7c35c450 V:[UIButton:0x7c3588a0(92)] Hug:250 CompressionResistance:750>") 

を、私は、彼らがあるため、上部と左右と下の制約がここにログインしてはならないことを知っていますスーパービューの制約はボタンの制約ではありません。 しかし、ここでは、(コード内であっても)ボタンに幅と高さの制約を追加しませんでした。

なぜ制約の高さと幅がコンソールに記録されますか?

答えて

6

ビューの内容に基づいて自然な幅がある場合は、その幅をintrinsicContentSize.widthとして返します。それ以外の場合は、intrinsicContentSize.widthUIViewNoIntrinsicMetricに設定します。

同様に、自然な高さを持つ場合は、その幅をintrinsicContentSize.heightとして返します。それ以外の場合は、intrinsicContentSize.heightUIViewNoIntrinsicMetricに設定します。

ボタンは、タイトル、フォント、画像、その他の詳細によって決まる自然なサイズ(幅と高さの両方)を持ちます。したがって、intrinsicContentSize.widthintrinsicContentSize.heightの両方が有効なサイズであり、UIViewNoIntrinsicMetricではありません。

intrinsicContentSize.width != UIViewNoIntrinsicMetricの場合、自動レイアウトでは、タイプNSContentSizeLayoutConstraintの特別な制約がビューにインストールされます。同様に、intrinsicContentSize.height != UIViewNoIntrinsicMetricの場合、自動レイアウトはNSContentSizeLayoutConstraintをビューにインストールします。

これらの特別な制約の詳細については、this answerを参照してください。

+0

つまり、彼らは本当の制約のようなものですか?私は私のlableの幅が大きくなるように強制した、そして、私は私のボタンが縮小するのを見た。 (ボタンに制約幅を追加しなかったため)。私のボタンに制約幅を追加すると(インターフェースビルダーで)、私のボタンは縮小しません。 –

+0

はい、実際の制約ですが、デフォルトでは、優先度はRequired(1000)未満です。幅制約を追加すると、デフォルトで優先度が「Required(1000)」になり、「勝つ」ようになります。 –

+0

ありがとうございます。正解。 –

関連する問題