この種の自動レイアウトは可能ですが、1 つまたは 2 つの UIImageView を表示しているかどうかに基づいて、1 つの制約をプログラムで変更する必要があります。
自動レイアウトを使用して行う方法は次のとおりです。
コンテナ ビューを作成する
- コンテナーとして UIView を作成します。
- コンテナー ビューの左端を左マージンに移動します。
- コンテナー ビューの右端を右マージンに移動します。
- コンテナー ビューの高さを固定します。
- スーパービューへの下部スペースの制約を削除します。
UIImageView を作成する
- コンテナー ビュー内に 3 つの UIImageView を作成します。
- 表示する UIImage ビューのサイズと位置を合わせます。
- 最初の画像ビューと 2 番目の画像ビューの間の水平方向の間隔を固定します。
- 2 番目と 3 番目の画像ビューの間の水平方向の間隔を固定します。
- 最初のイメージ ビューの先頭のスペースをスーパービューに固定します。
- 3 番目のイメージ ビューの末尾のスペースをスーパービューに固定します。
- 3 つのイメージ ビューをすべて選択し、幅を均等に固定します。
- 2 番目のイメージ ビューの align center x 制約を削除します。
- 2 番目のイメージ ビューでイメージ ビュー制約への末尾のスペースを選択し、優先度を 900 (重要) に設定します。
Magic Extra Constraint を作成する
- 末尾のスペースを 2 番目のイメージ ビューのスーパービューに固定します。
- 新しい制約を選択し、優先度を 850 に設定します。
- 制約の定数値を 0 に設定します。
コンテナー UIView は、含まれているビューの余白と高さを維持するためのものです。
2 番目のイメージ ビューには 2 つの末尾の制約があり、両方とも点線で表示されます。画面を回転すると、コンテナー ビューが収まるように伸縮し、3 つの UIImageViews も伸縮して収まるようになります。
現在、2 番目と 3 番目の画像ビューの間の制約は、2 番目の画像ビューとコンテナー ビューの間の「魔法の」制約よりも優先度が高いため、2 番目の画像ビューの右端が 3 番目の画像ビューの左端から離されます。2 つの画像だけのレイアウトを調整するには、「マジック」制約を他の制約よりも優先する必要があります。これにより、2 番目の画像ビューの右端がスーパービューの右端に揃えられます。
「魔法の」制約 (2 番目のイメージ ビューのスーパービューへの末尾のスペース) の IBOutlet を作成し、必要に応じて優先順位を上げ下げします。
if (imageCount == 2) {
// Second image view should favor right edge of superview
self.myConstraint.priority = 950;
} else if (imageCount == 3) {
// Second image view should favor left edge of third image view
self.myConstraint.priority = 850;
}
必要に応じて、3 番目の画像ビューを非表示にすることもできます。