基本的に、次の 4 つのことを制約する必要があります。
- スーパービューへのサブビューの先行スペースをゼロにする
- スーパービューへのサブビューの上部スペースをゼロにする
- サブビューの幅をスーパービューの幅と等しくする
- サブビューの高さをスーパービューの幅と等しくする
視覚的な制約がうまくいかない場合は、コードでこれら 4 つの制約を個別に作成できます。メソッド+constraintWithItem:attribute:relatedBy:toItem:attribute:multiplier:
constant:
を使用して、異なるビューの属性間の正確な関係を指定します。たとえば、上記の制約 #1 は次のように表現できます。
[NSLayoutConstraint constraintWithItem:mySubview
attribute:NSLayoutAttributeLeading
relatedBy:NSLayoutRelationEqual
toItem:mySuperview
attribute:NSLayoutAttributeLeading
multiplier:1.0f
constant:0.0f]
#3は次のようになります。
[NSLayoutConstraint constraintWithItem:mySubview
attribute:NSLayoutAttributeWidth
relatedBy:NSLayoutRelationEqual
toItem:mySuperview
attribute:NSLayoutAttributeWidth
multiplier:1.0f
constant:0.0f]
これら 4 つの制約を作成したら、必要に応じてそれらをスーパービューに追加できます。
上記と同じ効果を得るには複数の方法があることに注意してください。
- 幅と高さではなく、末尾のスペースと下部のスペースを制限する場合があります
- 先頭と上部のスペースの代わりに、中心 Xと中心 Yを制約する場合があります。
Peter Hosey's answer のように、視覚的表現で同じ制約を考え出すこともできます。たとえば、等幅制約は@"[mySubview(==mySuperview)]"
、適切なビュー ディクショナリのように見える場合があります。
Auto Layout Guideは、問題が発生した場合のデバッグ方法など、制約に関する豊富な情報であることに注意してください。