ビューのサイズを変更して残りの使用可能なスペースを埋めるには、ビューに追加の制約を指定する必要があります。現在、ビューの最小値と最大値を設定していますが、自動レイアウトにより完全なソリューションを提供するための具体的な制約は設定していません。幅の上限に加えて、1. ビューの幅を解決するための開始点として、優先度の低い幅を明示的に指定するか、または 2. 両側の間隔をもう少し大きくする必要があります。厳格な制約。
説明した内容に基づいて、システムが幅を解決できるように、ビューを制約して、どちらかの側のスーパービューへのより実質的なバインディングを与える必要があります。ビューのサイズ自体をコンテナーのサイズに基づいて設定したいので、間隔の制約を変更する必要があります (上記のオプション 2)。上記の例では、最小間隔のみを指定しているため、次の制約ソリューションのいずれかが 400pt スーパービューの自動レイアウト エンジンによって有効であると検出されます。
|-32pt-[20pt]-------348pt-| <-- autolayout will probably choose this one
|-100pt----[20pt]---280pt-|
|-50pt--[20pt-]-----330pt-|
これはおそらくあなたが望んでいるものではありません。さらに、ビューの幅は 0 から 576pt の間の任意の値にすることができますが、これもおそらくあなたが望んでいるものではありません。autolayout はユーザーが何を望んでいるのかを認識していないためintrinsicContentSize
、ビューの を使用して具体的なサイズ制限を設定しているだけです。間隔として 32pt を選択したため、最初のステップは、間隔の制約にさらに実質的な指示を与えることです。つまり、ビューの幅が適切でない限り、ビューとスーパービューの端の間の間隔を 32pts にする必要があることをシステムに伝えます。 >576点。VFL 文字列で次のようにします。
"H:|-(>=32,==32@900)-[viewToAdd(<=576)]-(>=32,==32@900)-|"
「viewToAdd
最大幅は 576pts で、それ自体と 32pts のスーパービューの間にパディングが必要です。スーパービュー のサイズが、最大幅に 64pts の初期パディングを加えた値を超えて大きくなった場合、両側のパディングは順番に拡大する必要があります。拘束セットの解決を続行します。"viewToAdd
これにより、次の制約が 400 ポイントのスーパービューに対して正しくなります。
|-32pt--[336pt]--32pt-|
viewToAdd
ビューが最大値を超えたときにスーパービューの中心に留まりたい場合は、 のパラメータにオプションNSLayoutFormatAlignAllCenterX
を渡す必要があります。パディングに制約を設定していない場合、またはパディングの制約に 1000 未満の優先度 (「必須」の制約優先度レベル) を設定していない場合、スーパービューは 640 ポイントを超えて拡大できません。options
[NSLayoutConstraint -constraintsWithVisualFormat:]
>=32
==32