AutoLayoutの制約をコードで書く

全体の流れ
1.子になるViewを作る
2.親のViewに追加する
3.制約を書く
4.制約を追加する

親のViewにUIImageViewを追加してみる

UIImageView*imageView=[[UIImageView alloc]init];
imageView.translatesAutoresizingMaskIntoConstraints=NO;
[self.view addSubView:imageView];

NSMutableArray*array=[[NSMutableArray alloc]initWithCapacity:0];

//高さが300
[array addObject:[NSLayoutConstraint constraintWithItem:self attribute:NSLayoutAttributeHeight relatedBy:NSLayoutRelationEqual toItem:nil attribute:NSLayoutAttributeHeight multiplier:1.0 constant:300.0]];

//左は16開ける
[array addObject:[NSLayoutConstraint constraintWithItem:imageView attribute:NSLayoutAttributeLeading relatedBy:NSLayoutRelationEqual toItem:self.view attribute:NSLayoutAttributeLeading multiplier:1.0 constant:16.0]];

//右も16開ける
[array addObject:[NSLayoutConstraint constraintWithItem:imageView attribute:NSLayoutAttributeTrailing relatedBy:NSLayoutRelationEqual toItem:self.view attribute:NSLayoutAttributeTrailing multiplier:1.0 constant:-16.0]];

//上は100開ける
[array addObject:[NSLayoutConstraint constraintWithItem:imageView attribute:NSLayoutAttributeTop relatedBy:NSLayoutRelationEqual toItem:self.view attribute:NSLayoutAttributeTop multiplier:1.0 constant:100.0]];

[self.view addConstraints:array];
[self.view layoutIfNeeded];

iOS8からは制約の追加は
[NSLayoutConstraint activateConstraints:array]
って書くらしい。
制約の追加先を考えなくてもいいのは楽かも。


センターを揃える時
[array addObject:[NSLayoutConstraint constraintWithItem:imageView attribute:NSLayoutAttributeCenterX relatedBy:NSLayoutRelationEqual toItem:self.view attribute:NSLayoutAttributeCenterX multiplier:1.0 constant:100.0]];

アスペクト比を決める場合(この例は横が縦の半分)
[array addObject:[NSLayoutConstraint constraintWithItem:imageView attribute:NSLayoutAttributeWidth relatedBy:NSLayoutRelationEqual toItem:imageView attribute:NSLayoutAttributeHeight multiplier:1.0/2.0 constant:0.0]];

コメントを残す