constraintsWithVisualFormat:~とconstraintWithItem:~の関係がよくわからなかったので確認。
Visual Format Languageを使わずに、Visual Format Languageと同じConstraintを再現する方法のメモ。たぶんこれで同じ制約がかけれているはず。
例題はAutolayout に対応した画面で UIScrollView を使う時のコツからお借りしました。
Visual Format Languageを使った書き方
// Constraint(制約)を追加
[self.scrollView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"|-40-[view1(==240)]-20-[view2(==240)]-40-|"
options:0
metrics:0
views:NSDictionaryOfVariableBindings(view1, view2)]];
Visual Format Languageを使わない書き方
[self.scrollView addConstraint:
[NSLayoutConstraint constraintWithItem:view1
attribute:NSLayoutAttributeLeft
relatedBy:NSLayoutRelationEqual
toItem:self.scrollView
attribute:NSLayoutAttributeLeft
multiplier:1.0
constant:40]];
[self.scrollView addConstraint:
[NSLayoutConstraint constraintWithItem:view1
attribute:NSLayoutAttributeWidth
relatedBy:NSLayoutRelationEqual
toItem:nil
attribute:NSLayoutAttributeWidth
multiplier:1.0
constant:240]];
[self.scrollView addConstraint:
[NSLayoutConstraint constraintWithItem:view2
attribute:NSLayoutAttributeLeft
relatedBy:NSLayoutRelationEqual
toItem:view1
attribute:NSLayoutAttributeRight
multiplier:1.0
constant:20]];
[self.scrollView addConstraint:
[NSLayoutConstraint constraintWithItem:view2
attribute:NSLayoutAttributeWidth
relatedBy:NSLayoutRelationEqual
toItem:nil
attribute:NSLayoutAttributeWidth
multiplier:1.0
constant:240]];
[self.scrollView addConstraint:
[NSLayoutConstraint constraintWithItem:view2
attribute:NSLayoutAttributeRight
relatedBy:NSLayoutRelationEqual
toItem:self.scrollView
attribute:NSLayoutAttributeRight
multiplier:1.0
constant:40]];
Visual Format Languageを使うと、変数名とかを文字列で書き込むことになって微妙だなーと思ったけど、
使わないのは使わないで、記述量が多すぎる。。。