Appleの documentation ビューとレイアウトガイドの1つとの間の自動レイアウト制約の作成では、 [〜#〜] vfl [〜#〜] を使用した例を示しています。
これらの制約をプログラムで作成する方法はありますかwithoutVFL( NSLayoutConstraint
の他のAPI または同様のものを使用)
(注:Interface Builderではなくコードでこれを行うことを具体的に求めています。また、ガイドセットの計算されたlength
を制約の静的定数として望んでいません。レイアウトガイドの長さを変更すると、拘束されたビューの位置が自動的に調整されます。)
UIButton
をUIViewController.topLayoutGuide
の下に20ポイント配置する場合は、次のようにNSLayoutConstraint
を作成します。
[NSLayoutConstraint constraintWithItem:self.button
attribute:NSLayoutAttributeTop
relatedBy:NSLayoutRelationEqual
toItem:self.topLayoutGuide
attribute:NSLayoutAttributeBottom
multiplier:1.0
constant:20.0];
IOS 9では、次の方法でNSLayoutConstraint
を作成することもできます。
[self.button.topAnchor constraintEqualToAnchor:self.topLayoutGuide.bottomAnchor
constant:20.0];
@JamieMcDanielの答えを補足するため、Swift + iOS9バージョンは次のようになります。
self.button.topAnchor
.constraintEqualToAnchor( self.topLayoutGuide.bottomAnchor ).active = true
.active = true
部分を忘れないでください。そうしないと、制約が自動的に有効になりません。
@Jamie McDanielに追加するだけで、すぐに明らかでない場合は、彼が作成することを提案した制約を追加する必要があります。
NSLayoutConstraint *buttonTopConstraint = [NSLayoutConstraint constraintWithItem:self.button
attribute:NSLayoutAttributeTop
relatedBy:NSLayoutRelationEqual
toItem:self.topLayoutGuide
attribute:NSLayoutAttributeBottom
multiplier:1.0
constant:20.0];
[self.view addConstraint:buttonTopConstraint];
これは Gist 私が作成したもので、すべてのサブビューをxibに追加されたタンクビュー(コンテナビュー)に埋め込み、タンクビューとスーパービューxibの制約を削除し、上位の制約を追加しますiOS6の外観を与えるtopLayoutGuideへ。あなたが達成したいことは面白いかもしれません。
//This should be added before the layout of the view
- (void) adaptToTopLayoutGuide {
//Check if we can get the top layoutguide
if (![self respondsToSelector:@selector(topLayoutGuide)]) {
return;
}
//tankView is a contaner view
NSArray * array = [self.tankView referencingConstraintsInSuperviews]; //<--For this method get the Autolayout Demistified Book Sample made by Erica Sadun
[self.view removeConstraints:array];
NSArray * constraintsVertical = [NSLayoutConstraint constraintsWithVisualFormat:@"V:|[topLayoutGuide]-0-[tankView]|" options:0 metrics:nil views:@{@"tankView": self.tankView, @"topLayoutGuide":self.topLayoutGuide}];
[self.view addConstraints:constraintsVertical];
NSArray * constraintsHorizontal = [NSLayoutConstraint constraintsWithVisualFormat:@"H:|[tankView]|" options:0 metrics:nil views:@{@"tankView": self.tankView}];
[self.view addConstraints:constraintsHorizontal];
}