0

プログラムで作成された単純なレイアウトに戸惑っています。ここでは、制約を使用して 、a UILabel、 a が並んでいます。以下の動作を理解していただければ幸いです。UITextFieldUIButton

ビジュアル フォーマット言語を使用して、これらのビューを次のようにレイアウトすると...

|-[label]-[field]-[button]-|

...次のように、ラベルができるだけ多くのスペースを取りたいと考えていることがわかります。

[   label  ] [field] [button]

しかし、式からラベルを削除すると...

|-[field]-[button]-|

...次に、スペースを引き継ぎたいのはボタンです。

[field] [       button      ]

ラベルとボタンに「ハグの優先度を高く」設定することで、サイズを制御できます (本来のサイズを維持していると思います)。しかし、これらの場合の動作の違いの理由はわかりません。

ここで autolayout が正確にどのように機能しているか知っていますか?

関連する質問:

自動レイアウトを使用して UILabel と UITextField を隣り合わせにする

4

1 に答える 1

1

ラベルとボタンのコンテンツ保持優先度が互いに等しく、そのうちの 1 つを他の制約を満たすために拡大する必要がある場合、どちらを拡大するかは任意です。一般に、制約に対して複数の解決策があり、優先順位がそれらを区別しない場合、あいまいさがあり、自動レイアウト システムは可能な解決策のいずれかで制約を解決できます。実行ごとに変更できます。レイアウト パスが完了するたびに変更することもできます。つまり、ユーザーがビューを操作している間にビューが飛び回ることがあります。

あるケースではラベルが引き伸ばされ、別のケースではボタンが引き伸ばされたという事実は、単なるランダムです。

次のようなものが|-[label]-[field]-[button]-|あり、コンテナーの幅が 3 つのビューの固有の幅とそれらの間の間隔の合計と必ずしも等しくない可能性がある場合 (何かを引き伸ばす必要がある場合があるため)、常に1 つを指定する必要があります。コンテンツを保持する優先度を最も低くすることで引き伸ばされます。

于 2015-05-26T01:24:36.767 に答える