LoginSignup
11
11

More than 5 years have passed since last update.

[AutoLayout] Visual Format Languageが生成するNSLayoutConstraintを全手動で再現

Last updated at Posted at 2014-08-12

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を使うと、変数名とかを文字列で書き込むことになって微妙だなーと思ったけど、
使わないのは使わないで、記述量が多すぎる。。。

11
11
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
11
11