見て、スペーサーなし!
元の回答のコメントセクションにある提案、特に@Riveraの役立つ提案に基づいて、元の回答を簡略化しました。
これがいかに単純かを示すためにgifを使用しています。gifがお役に立てば幸いです。gifで問題が発生した場合に備えて、私は以下の古い答えをプレーンスクリーンショットに含めました。
手順:
1)ボタンまたはラベルを追加します。3つのボタンを使用しています。
2)各ボタンからスーパービューに中心x制約を追加します。
3)各ボタンから下部のレイアウト制約に制約を追加します。
4)上記の#3で追加した制約を次のように調整します。
a)制約を選択し、
b)定数を削除し(0に設定)、
c)乗数を次のように変更します。ボタンの数+ 1を受け取り、最初から乗数をbuttonCountPlus1:1に設定し、次にbuttonCountPlus1を設定します。 :2、そして最後にbuttonCountPlus1:3。(興味がある場合は、以下の古い回答でこの式をどこから取得したかを説明します)。
5)デモはこちらです!
注:ボタンの高さが大きい場合、制約はボタンの下部からのものであるため、定数値でこれを補正する必要があります。
古い答え
AppleのドキュメントとErica Sadunの優れた本(Auto Layout Demystified)が言っていることにもかかわらず、スペーサーなしでビューを均等に配置することが可能です。これは、IBやコードで均等に配置したい要素をいくつでも実行するのが非常に簡単です。必要なのは「セクション式」と呼ばれる数式です。説明するよりも行う方が簡単です。IBでデモンストレーションして最善を尽くしますが、コードで行うのも同じくらい簡単です。
問題の例では、
1)各ラベルを中央の制約を持つように設定することから始めます。これは非常に簡単です。各ラベルから下部へのドラッグを制御するだけです。
2)シフトを押し続けます。これは、使用する他の制約、つまり「下部スペースから下部へのレイアウトガイド」を追加する場合もあるからです。
3)「下のスペースから下のレイアウトガイド」を選択し、「コンテナ内で水平方向に中央揃え」を選択します。3つのラベルすべてに対してこれを行います。
基本的に、決定したい座標のラベルを取り、ラベルの総数に1を加えたもので割ると、動的な場所を取得するためにIBに追加できる数が得られます。数式を簡略化していますが、水平間隔または垂直と水平の両方を同時に設定するために使用できます。超強力です!
これが乗数です。
Label1 = 1/4 = .25、
Label2 = 2/4 = .5、
ラベル3 = 3/4 = .75
(編集:@Riveraは、倍率を乗数フィールドで直接使用でき、xCodeで計算を実行できるとコメントしました!)
4)では、Label1を選択し、一番下の制約を選択します。このような:
5)属性インスペクタで「2番目のアイテム」を選択します。
6)ドロップダウンから「1番目と2番目のアイテムを逆にする」を選択します。
7)定数とwC hAny値をゼロにします。(必要に応じて、ここにオフセットを追加できます)。
8)これは重要な部分です。乗数フィールドに最初の乗数0.25を追加します。
9)そこにいる間、ラベルのyの中心に配置したいので、上部の「最初のアイテム」を「CenterY」に設定します。これがすべての外観です。
10)ラベルごとにこのプロセスを繰り返し、関連する乗数を接続します。Label2には0.5、Label3には0.75です。これが、あらゆるコンパクトなデバイスを備えた、あらゆる向きの最終製品です。超シンプル。一連のコードとスペーサーを含む多くの解決策を見てきました。これは、この問題について私が見た中で最善の解決策です。
更新:@kraftydevilは、ボトムレイアウトガイドがストーリーボードにのみ表示され、xibsでは表示されないことを追加しました。xibsで 'Bottom Space to Container'を使用します。良いキャッチ!