NSLayoutAnchor
フレームワーク:OS X 10.11 以降の AppKit。関連項目..
概要
NSLayoutAnchor クラスは、流れるような API を使用して NSLayoutConstraint オブジェクトを作成するためのファクトリクラスです。自動レイアウトを使用してレイアウトをプログラムで定義するには、これらの制約を使用してください。
NSLayoutConstraint オブジェクトを直接作成する代わりに、UIView、NSView、または UILayoutGuide オブジェクトであなたの制約したいものを始め、およびそのオブジェクトのアンカープロパティのいずれかひとつを選択して下さい。これらのプロパティは、自動レイアウトで使用される主な NSLayoutAttribute 値に対応しており、その属性に制約を作成するため適切な NSLayoutAnchor サブクラスを提供します。あなたの制約を構築するために、アンカーのメソッドを使用して下さい。
注意: UIView は、レイアウトマージン属性のアンカープロパティを提供していません。その代わりに、layoutMarginsGuide プロパティは、これらのマージンを表す UILayoutGuide オブジェクトを提供します。あなたの制約を作成するためガイドのアンカープロパティを使用して下さい。
<< OBJECTIVE-C >>
- // Creating constraints using NSLayoutConstraint
- [NSLayoutConstraint
- constraintWithItem:subview
- attribute:NSLayoutAttributeLeading
- relatedBy:NSLayoutRelationEqual
- toItem:self.view
- attribute:NSLayoutAttributeLeadingMargin
- multiplier:1.0
- constant:0.0].active = YES;
- [NSLayoutConstraint
- constraintWithItem:subview
- attribute:NSLayoutAttributeTrailing
- relatedBy:NSLayoutRelationEqual
- toItem:self.view
- attribute:NSLayoutAttributeTrailingMargin
- multiplier:1.0
- constant:0.0].active = YES;
- // Creating the same constraints using Layout Anchors
- UILayoutGuide *margin = self.view.layoutMarginsGuide;
- [subview.leadingAnchor constraintEqualToAnchor:margin.leadingAnchor].active = YES;
- [subview.trailingAnchor constraintEqualToAnchor:margin.trailingAnchor].active = YES;
<< SWIFT >>
1. // Creating constraints using NSLayoutConstraint 2. NSLayoutConstraint(item: subview, 3. attribute: .Leading, 4. relatedBy: .Equal, 5. toItem: view, 6. attribute: .LeadingMargin, 7. multiplier: 1.0, 8. constant: 0.0).active = true 9. 10. NSLayoutConstraint(item: subview, 11. attribute: .Trailing, 12. relatedBy: .Equal, 13. toItem: view, 14. attribute: .TrailingMargin, 15. multiplier: 1.0, 16. constant: 0.0).active = true 17. 18. 19. // Creating the same constraints using Layout Anchors 20. let margins = view.layoutMarginsGuide 21. 22. subview.leadingAnchor.constraintEqualToAnchor(margins.leadingAnchor).active = true 23. subview.trailingAnchor.constraintEqualToAnchor(margins.trailingAnchor).active = true
これらの例からもわかるように、NSLayoutAnchor クラスは直接 NSLayoutConstraint API を使用して、いくつかの利点を提供します。
- コードは、より綺麗に、より簡潔に、かつ読みやすくなります。
- NSLayoutAttribute サブクラスは、無効な制約を作成するのを防ぐ、追加の型チェックを提供します。
注意: NSLayoutAnchor クラスは、追加の型チェックを提供していますが、無効な制約を作成することはまだ可能です。例えば、コンパイラは、それらが両方の NSLayoutXAxisAnchor インスタンスがあるので、別のビューの leftAnchor に、あるビューの leadingAnchor を制約することができます。しかし、自動レイアウトは、左または右の属性で先頭と末尾の属性を混在する制約を許可していません。その結果、この制約は、実行時にクラッシュします。
アンカープロパティの詳細については、UIView クラスリファレンス の レイアウトのアンカーを使用して制約の作成、NSView クラスリファレンス、または UILayoutGuide クラスリファレンス を参照してください。
注意:
あなたは直接 NSLayoutAnchor クラスを使用することは決してありません。その代わり、作成したい制約の型に基づいて、そのサブクラスの 1 つを使用します。
- 水平方向の制約を作成するには NSLayoutXAxisAnchor を使用してください。
- 垂直方向の制約を作成するには NSLayoutYAxisAnchor を使用してください。
- ビューの高さや幅に影響を与える制約を作成するには NSLayoutDimension を使用してください。
しかし、UIView、NSView、または UILayoutGuide のアンカープロパティを使用して NSLayoutAnchor オブジェクトにアクセスするので、正しいサブクラスが自動的に提供されます。
タスク
制約のビルド
- constraintEqualToAnchor:
ある項目の属性を他に等しいように、定義する制約を返します。
宣言
<< SWIFT >>
func constraintEqualToAnchor(_ anchor: NSLayoutAnchor!) -> NSLayoutConstraint! << OBJECTIVE-C >> - (NSLayoutConstraint *)constraintEqualToAnchor:(NSLayoutAnchor<AnchorType> *)anchor
パラメーター
anchor | UIView、NSView、または UILayoutGuide オブジェクトからのレイアウトアンカー。現在のアンカーに一致する NSLayoutAnchor のサブクラスを使用しなければなりません。 NSLayoutXAxisAnchor オブジェクト上のこのメソッドを呼び出す場合、このパラメータは、別の NSLayoutXAxisAnchor でなければなりません。 |
戻り値
二つのレイアウトアンカーで表される属性間の対等な関係を定義する NSLayoutConstraint オブジェクト。
議論
このメソッドは、first attribute = second attribute の関係を定義します。ここで first attribute は、このメソッドの呼び出しを受けたアンカーに表されるレイアウト属性であり、そして second attribute は、anchor パラメータによって表されるレイアウト属性です。
以下 2 つの例により表された制約は同一です。
- // Creating a constraint using NSLayoutConstraint
- [NSLayoutConstraint
- constraintWithItem:subview
- attribute:NSLayoutAttributeLeading
- relatedBy:NSLayoutRelationEqual
- toItem:self.view
- attribute:NSLayoutAttributeLeadingMargin
- multiplier:1.0
- constant:0.0].active = YES;
- // Creating the same constraint using constraintEqualToAnchor:
- UILayoutGuide *margin = self.view.layoutMarginsGuide;
- [subview.leadingAnchor constraintEqualToAnchor:margin.leadingAnchor].active = YES;
<< OBJECTIVE-C >>
<< SWIFT >>
1. // Creating a constraint using NSLayoutConstraint 2. NSLayoutConstraint(item: subview, 3. attribute: .Leading, 4. relatedBy: .Equal, 5. toItem: view, 6. attribute: .LeadingMargin, 7. multiplier: 1.0, 8. constant: 0.0).active = true 9. 10. // Creating the same constraint using constraintEqualToAnchor: 11. let margins = view.layoutMarginsGuide 12. subview.leadingAnchor.constraintEqualToAnchor(margins.leadingAnchor).active = true
利用可能
OS X 10.11 以降で利用可能。
- constraintEqualToAnchor:constant:
ある項目の属性を別の項目の属性に定数のオフセットを加えたものに定義する制約を返します。
宣言
<< SWIFT >>
func constraintEqualToAnchor(_ anchor: NSLayoutAnchor!, constant c: CGFloat) -> NSLayoutConstraint! << OBJECTIVE-C >> - (NSLayoutConstraint *)constraintEqualToAnchor:(NSLayoutAnchor<AnchorType> *)anchor constant:(CGFloat)c
パラメーター
anchor | UIView、NSView、または UILayoutGuide オブジェクトからのレイアウトアンカー。現在のアンカーに一致する NSLayoutAnchor のサブクラスを使用しなければなりません。 NSLayoutXAxisAnchor オブジェクト上でこのメソッドを呼び出す場合、このパラメータは、別の NSLayoutXAxisAnchor でなければなりません。 |
c | 制約の定数オフセット。 |
戻り値
定数のオフセットを加えた二つのレイアウトのアンカーによって表される属性間の対等な関係を定義する NSLayoutConstraint オブジェクト。
議論
このメソッドは、first attribute = second attribute + c の関係を定義します。ここで first attribute がこのメソッドの呼び出しを受けるアンカーによって表されるレイアウトの属性であり、second attribute は anchor パラメーターによって表されるレイアウトの属性です。値 c は、定数のオフセットを表します。すべての値はポイント単位で測定されています。しかし、これらの値は、レイアウトのアンカーの種類に応じて、異なる方法で解釈できます。
- NSLayoutXAxisAnchor オブジェクトの場合、最初の属性は、第2の属性の後の点 c に位置しています。先頭または末尾の属性を使用するときは、言語を読む方向に移動するように、値は増加します。例えば、英語では、あなたが右に移動すると、値が増加します。左と右の属性の場合、あなたが右に移動すると値は常に増加します。
- NSLayoutYAxisAnchor オブジェクトの場合、最初の属性は、第2の属性の下の点 c に位置しています。下に移動すると値が増加します。
- NSLayoutDimension オブジェクトの場合、最初の属性のサイズは、第2の属性のサイズよりも大きい点の c です。項目のサイズが増加するにつれて値が増加します。
以下の2つの例により生成される制約は同一です。
<< OBJECTIVE-C >>
1.// Creating a constraint using NSLayoutConstraint 2. 3. [NSLayoutConstraint constraintWithItem:self.textField 4. attribute:NSLayoutAttributeLeading 5. relatedBy:NSLayoutRelationEqual 6. toItem:self.label 7. attribute:NSLayoutAttributeTrailing 8. multiplier:1.0 9. constant:8.0].active = YES; 10. 11. // Creating the same constraint using constraintEqualToAnchor:constant: 12. [self.textField.leadingAnchor constraintEqualToAnchor:self.label.trailingAnchor
constant:8.0].active = YES;
<< SWIFT >>
1. // Creating a constraint using NSLayoutConstraint 2. 3. NSLayoutConstraint(item: textField, 4. attribute: .Leading, 5. relatedBy: .Equal, 6. toItem: label, 7. attribute: .Trailing, 8. multiplier: 1.0, 9. constant: 8.0).active = true 10. 11. // Creating the same constraint using constraintEqualToAnchor:constant: 12. textField.leadingAnchor.constraintEqualToAnchor(label.trailingAnchor, constant: 8.0)
.active = true
利用可能
OS X 10.11 以降で利用可能。
- constraintGreaterThanOrEqualToAnchor:
一つの項目の属性を別の項目以上にするように定義する制約を返します。
宣言
<< SWIFT >>
func constraintGreaterThanOrEqualToAnchor(_ anchor: NSLayoutAnchor!) -> NSLayoutConstraint! << OBJECTIVE-C >> - (NSLayoutConstraint *)constraintGreaterThanOrEqualToAnchor:(NSLayoutAnchor<AnchorType> *)anchor
パラメーター
anchor | UIView、NSView、または UILayoutGuide オブジェクトからのレイアウトアンカー。現在のアンカーに一致する NSLayoutAnchor のサブクラスを使用しなければなりません。 NSLayoutXAxisAnchor オブジェクト上でこのメソッドを呼び出す場合、このパラメータは、別の NSLayoutXAxisAnchor でなければなりません。 |
戻り値
anchor パラメータで表される属性以上として、このレイアウトアンカーによって表される属性を定義する NSLayoutConstraint オブジェクト。
議論
このメソッドは、first attribute >= second attribute である関係を作成します。ここで first attribute は、このメソッドの呼び出しを受けるアンカーによって表されるレイアウトの属性であり、そして second attribute は、 anchor パラメータによって表されるレイアウト属性です。すべての値はポイント単位で測定されています。しかし、これらの値は、レイアウトアンカーの種類に応じて、異なる方法で解釈できます。
- 先頭または末尾のアンカーの場合、現在の言語の読む方向に移動すると、値は増加します。例えば、英語では、あなたが右に移動すると、値は増加します。
- 左と右のアンカーの場合、あなたが右に移動すると、値は増加します。
- NSLayoutYAxisAnchor オブジェクトの場合、あなたが下に移動すると値が増加します。
- NSLayoutDimension オブジェクトの場合、項目がサイズで増加すると値が増加します。
以下の二つの例により生成される制約は同一です。
<< OBJECTIVE-C >>
- // Creating a constraint using NSLayoutConstraint
- [NSLayoutConstraint
- constraintWithItem:subview
- attribute:NSLayoutAttributeLeading
- relatedBy:NSLayoutRelationGreaterThanOrEqual
- toItem:self.view
- attribute:NSLayoutAttributeLeadingMargin
- multiplier:1.0
- constant:0.0].active = YES;
- // Creating the same constraint using constraintGreaterThanOrEqualToAnchor:
- UILayoutGuide *margin = self.view.layoutMarginsGuide;
- [subview.leadingAnchor constraintGreaterThanOrEqualToAnchor:margin.leadingAnchor].active = YES;
<< SWIFT >>
1. // Creating a constraint using NSLayoutConstraint 2. NSLayoutConstraint(item: subview, 3. attribute: .Leading, 4. relatedBy: .GreaterThanOrEqual, 5. toItem: view, 6. attribute: .LeadingMargin, 7. multiplier: 1.0, 8. constant: 0.0).active = true 9. 10. // Creating the same constraint using constraintGreaterThanOrEqualToAnchor: 11. let margins = view.layoutMarginsGuide 12. subview.leadingAnchor.constraintGreaterThanOrEqualToAnchor(margins.leadingAnchor).active = true
利用可能
OS X 10.11 以降で利用可能。
- constraintGreaterThanOrEqualToAnchor:constant:
他のアイテムの属性に定数のオフセットを加えたもの以上の一つの項目の属性を定義する制約を返します。
宣言
<< SWIFT >>
func constraintGreaterThanOrEqualToAnchor(_ anchor: NSLayoutAnchor!, constant c: CGFloat) -> NSLayoutConstraint! << OBJECTIVE-C >> - (NSLayoutConstraint *)constraintGreaterThanOrEqualToAnchor:(NSLayoutAnchor<AnchorType> *)anchor constant:(CGFloat)c
パラメーター
anchor | UIView、NSView、または UILayoutGuide オブジェクトからのレイアウトアンカー。現在のアンカーに一致する NSLayoutAnchor のサブクラスを使用しなければなりません。 NSLayoutXAxisAnchor オブジェクト上でこのメソッドを呼び出す場合、このパラメータは、別の NSLayoutXAxisAnchor でなければなりません。 |
c | 制約のための定数のオフセット。 |
戻り値
anchor パラメータに加えて定数のオフセットにより表された属性以上として、このレイアウトアンカーによって表される属性を定義する NSLayoutConstraint オブジェクト。
議論
このメソッドは、first attribute >= second attribute + c の関係を定義します。ここで first attribute は、このメソッドの呼び出しを受けるアンカーで表されるレイアウト属性であり、そして second attribute は、anchor パラメータによって表されるレイアウト属性です。値 c は、定数のオフセットを表します。すべての値はポイント単位で測定されています。しかし、これらの値は、レイアウトのアンカーの型に応じて、異なる方法で解釈できます。
- NSLayoutXAxisAnchor オブジェクトの場合、最初の属性は、第2の属性の後の点 c に位置しています。先頭または末尾の属性を使用するときは、言語を読む方向に移動するように、値が増加します。例えば、英語では、あなたが右に移動すると、値が増加します。左と右の属性の場合、あなたが右に移動すると値は常に増加します。
- NSLayoutYAxisAnchor オブジェクトの場合、最初の属性は、第2の属性の下の点 c に位置しています。あなたが下に移動すると値が増加します。
- NSLayoutDimension オブジェクトの場合、最初の属性のサイズは、第2の属性のサイズよりも大きい点 c です。項目のサイズが増加するにつれ、値が増加します。
以下の2つの例により生成される制約は同一です。
<< OBJECTIVE-C >>
1. // Creating a constraint using NSLayoutConstraint 2. 3. [NSLayoutConstraint constraintWithItem:self.textField 4. attribute:NSLayoutAttributeLeading 5. relatedBy:NSLayoutRelationLessThanOrEqual 6. toItem:self.label 7. attribute:NSLayoutAttributeTrailing 8. multiplier:1.0 9. constant:8.0].active = YES; 10. 11. // Creating the same constraint using constraintLessThanOrEqualToAnchor:constant: 12. [self.textField.leadingAnchor constraintLessThanOrEqualToAnchor:self.label.trailingAnchor
constant:8.0].active = YES;
<< SWIFT >>
1. // Creating a constraint using NSLayoutConstraint 2. 3. NSLayoutConstraint(item: textField, 4. attribute: .Leading, 5. relatedBy: .GreaterThanOrEqual, 6. toItem: label, 7. attribute: .Trailing, 8. multiplier: 1.0, 9. constant: 8.0).active = true 10. 11. // Creating the same constraint using constraintGreaterThanOrEqualToAnchor:constant: 12. textField.leadingAnchor.constraintGreaterThanOrEqualToAnchor(label.trailingAnchor,
constant: 8.0).active = true
利用可能
OS X 10.11 以降で利用可能。
- constraintLessThanOrEqualToAnchor:
ある項目の属性を他の項目以下に定義する制約を返します。
宣言
<< SWIFT >>
func constraintLessThanOrEqualToAnchor(_ anchor: NSLayoutAnchor!) -> NSLayoutConstraint! << OBJECTIVE-C >> - (NSLayoutConstraint *)constraintLessThanOrEqualToAnchor:(NSLayoutAnchor<AnchorType> *)anchor
パラメーター
anchor | UIView、NSView、または UILayoutGuide オブジェクトからのレイアウトアンカー。現在のアンカーに一致する NSLayoutAnchor のサブクラスを使用しなければなりません。 NSLayoutXAxisAnchor オブジェクト上でこのメソッドを呼び出す場合、このパラメータは、別の NSLayoutXAxisAnchor でなければなりません。 |
戻り値
anchor パラメータによって表される属性以下としてこのレイアウトアンカーに表される属性を定義する NSLayoutConstraint オブジェクト。
議論
このメソッドは、first attribute <= second attribute の関係を定義します。ここで first attribute は、このメソッドの呼び出しを受けるアンカーで表されるレイアウト属性であり、そして second attribute は、anchor パラメータによって表されるレイアウト属性です。すべての値はポイント単位で測定されています。しかし、これらの値は、レイアウトアンカーの型に応じて、異なる方法で解釈できます。
- 先頭または末尾のアンカーの場合、現在の言語を読む方向に移動すると、値は増加します。例えば、英語の場合、あなたが右に移動すると、値が増加します。
- 左と右のアンカーの場合、あなたが右に移動すると、値は増加します。
- NSLayoutYAxisAnchor オブジェクトの場合、あなたが下に移動すると、値が増加します。
- NSLayoutDimension オブジェクトの場合、項目のサイズが増加すると、値が増加します。
以下の2つの例により生成される制約は同一です。
<< OBJECTIVE-C >>
- // Creating a constraint using NSLayoutConstraint
- [NSLayoutConstraint
- constraintWithItem:subview
- attribute:NSLayoutAttributeLeading
- relatedBy:NSLayoutRelationLessThanOrEqual
- toItem:self.view
- attribute:NSLayoutAttributeLeadingMargin
- multiplier:1.0
- constant:0.0].active = YES;
- // Creating the same constraint using constraintLessThanOrEqualToAnchor:
- UILayoutGuide *margin = self.view.layoutMarginsGuide;
- [subview.leadingAnchor constraintLessThanOrEqualToAnchor:margin.leadingAnchor].active = YES;
<< SWIFT >>
1. // Creating a constraint using NSLayoutConstraint 2. NSLayoutConstraint(item: subview, 3. attribute: .Leading, 4. relatedBy: .LessThanOrEqual, 5. toItem: view, 6. attribute: .LeadingMargin, 7. multiplier: 1.0, 8. constant: 0.0).active = true 9. 10. // Creating the same constraint using constraintLessThanOrEqualToAnchor: 11. let margins = view.layoutMarginsGuide 12. subview.leadingAnchor.constraintLessThanOrEqualToAnchor(margins.leadingAnchor).active = true
利用可能
OS X 10.11 以降で利用可能。
- constraintLessThanOrEqualToAnchor:constant:
ある項目の属性を他の項目の属性に定数のオフセットを加えたもの以下と定義する制約を返します。
宣言
<< SWIFT >>
func constraintLessThanOrEqualToAnchor(_ anchor: NSLayoutAnchor!, constant c: CGFloat) -> NSLayoutConstraint! << OBJECTIVE-C >> - (NSLayoutConstraint *)constraintLessThanOrEqualToAnchor:(NSLayoutAnchor<AnchorType> *)anchor constant:(CGFloat)c
パラメーター
anchor | UIView、NSView、または UILayoutGuide オブジェクトからのレイアウトアンカー。現在のアンカーに一致する NSLayoutAnchor のサブクラスを使用しなければなりません。 NSLayoutXAxisAnchor オブジェクト上でこのメソッドを呼び出す場合、このパラメータは、別の NSLayoutXAxisAnchor でなければなりません。 |
c | 制約のための定数のオフセット。 |
戻り値
anchor パラメータに定数のオフセットを加えたものによって表される属性以下として表されるこのレイアウトアンカーに表される属性を定義する NSLayoutConstraint オブジェクト。
議論
このメソッドは first attribute <= second attribute + c の関係を定義します。ここで first attribute はこのメソッドの呼び出しを受けるアンカーで表されるレイアウト属性、そして second attribute は、anchor パラメーターで表されるレイアウト属性です。値 c は、定数のオフセットを表しています。全ての値はポイントで測定されますが、これらの値はレイアウトアンカーの型によって異なる方法で解釈できます。
- NSLayoutXAxisAnchor オブジェクトの場合、第一の属性は、第二の属性の c ポイント後ろに位置しています。先頭または末尾の属性を使用するときは、言語を読む方向に移動すると、値が増加します。例えば、英語では、あなたが右に移動すると、値は増加します。左と右の属性の場合、あなたが右に移動すると値は常に増加します。
- NSLayoutYAxisAnchor オブジェクトの場合、第一の属性は第二の属性から c ポイント下がった所に位置します。下にいくにつれ、値は増加します。
- NSLayoutDimension オブジェクトの場合、第一の属性のサイズは第二の属性のサイズより c ポイント大きいです。項目のサイズが大きくなると値は増加します。
以下の二つの例により生成される制約は同一です。
<< OBJECTIVE-C >>
1. // Creating a constraint using NSLayoutConstraint 2. 3. [NSLayoutConstraint constraintWithItem:self.textField 4. attribute:NSLayoutAttributeLeading 5. relatedBy:NSLayoutRelationLessThanOrEqual 6. toItem:self.label 7. attribute:NSLayoutAttributeTrailing 8. multiplier:1.0 9. constant:8.0].active = YES; 10. 11. // Creating the same constraint using constraintLessThanOrEqualToAnchor:constant: 12. [self.textField.leadingAnchor constraintLessThanOrEqualToAnchor:self.label.trailingAnchor constant:8.0].active = YES;
<< SWIFT >>
1. // Creating a constraint using NSLayoutConstraint 2. 3. NSLayoutConstraint(item: textField, 4. attribute: .Leading, 5. relatedBy: .LessThanOrEqual, 6. toItem: label, 7. attribute: .Trailing, 8. multiplier: 1.0, 9. constant: 8.0).active = true 10. 11. // Creating the same constraint using constraintLessThanOrEqualToAnchor:constant: 12. textField.leadingAnchor.constraintLessThanOrEqualToAnchor(label.trailingAnchor, constant: 8.0) .active = true
利用可能
OS X 10.11 以降で利用可能。
次:文書改定履歴