UIStackView
は、優先度 1000 (許容される最大優先度) の制約を作成します。これはUILayoutPriorityRequired
です。可能であれば、これらの制約を満たすために自動レイアウトが必要です。
「高」優先度の制約 (UILayoutPriorityDefaultHigh == 750
だと思います) は、スタック ビューに必要な制約と競合するため、自動レイアウトは制約を無視します。
制約の優先度を 1000 に設定すると、自動レイアウトは必要なすべての制約を満たすことができなくなります。エラーがログに記録され、制約の 1 つが破られます。どの制約が破られるかを選択することはできません。
システムを解決するには、3 つの制約の 1 つを破る必要があるだけであり、競合する 3 つの制約のいずれかを破ることができることに注意してください。ただし、相反する 3 つの制約のいずれか 1 つを破っても、ビューの中心にあるシステムから離れることはありません。どの制約自動レイアウトが壊れるかに応じて、ビューは引き伸ばされるか、スタックビューの一端を抱き締める必要があります。また、iOS の将来のバージョンでは自動レイアウトが変更される可能性があるため、別の制約が破られてレイアウトが変更される可能性があります。
スタック ビューを使用してビューを中央に配置しようとしている理由は明確ではありません。UIView
ビューが 1 つしかなく、それを中央に配置する場合は、その親をではなくプレーンにUIStackView
し、ビューを親ビューの中央に配置するように制約を設定します。
スタックに複数のサブビューを配置する必要があるためにスタック ビューを使用している場合は、コンテンツ ビューに加えて、2 つの非表示のスペーサー ビュー (軸の両端に 1 つずつ) を追加する必要があります。スペーサー間に等幅または等高の制約を作成します。