在storyBoard中自动布局时,要注意内容吸附优先级的问题,数值越大,优先级越高,就越能保持住本身的样子;
约束添加的原则:约束添加到父view上,如果没有父view,可以添加到共同的父别上(也就是爷爷辈,依次网上推),如果是宽度,高度可以添加到自己身上。
#import "ViewController.h"
@interface ViewController ()
@end
@implementation ViewController
- (void)viewDidLoad {
[superviewDidLoad];
UIView *blueView = [[UIViewalloc]init];
blueView.backgroundColor = [UIColorblueColor];
[self.viewaddSubview:blueView];
#warning 一定要把view的 autoresizing属性给禁用掉
blueView.translatesAutoresizingMaskIntoConstraints =NO;
// 创建redView
UIView *redView = [[UIViewalloc]init];
redView.backgroundColor = [UIColorredColor];
[self.viewaddSubview:redView];
redView.translatesAutoresizingMaskIntoConstraints =NO;
// 添加blueView顶部的约束
/**
withItem; 被约束的view
attribute :被约束view的属性
relatedBy:
NSLayoutRelationLessThanOrEqual = -1,
NSLayoutRelationEqual = 0,
NSLayoutRelationGreaterThanOrEqual
toItem : 参照的view
attribute :参照view的属性
*/
NSLayoutConstraint *blueTop = [NSLayoutConstraintconstraintWithItem:blueView
attribute:NSLayoutAttributeTop
relatedBy:NSLayoutRelationEqual
toItem:self.view
attribute:NSLayoutAttributeTop
multiplier:1
constant:20];
// 把约束添加到 控制的view上
[self.view addConstraint:blueTop];
// 添加blueView 的左侧约束
NSLayoutConstraint *blueLeft = [NSLayoutConstraintconstraintWithItem:blueView
attribute:NSLayoutAttributeLeft
relatedBy:NSLayoutRelationEqual
toItem:self.view
attribute:NSLayoutAttributeLeft
multiplier:1
constant:20];
// 把左侧的约束添加到控制器的view上
[self.view addConstraint:blueLeft];
// blueView 右侧的约束
NSLayoutConstraint *blueRight = [NSLayoutConstraintconstraintWithItem:blueView
attribute:NSLayoutAttributeRight
relatedBy:NSLayoutRelationEqual
toItem:self.view
attribute:NSLayoutAttributeRight
multiplier:1
constant:-20];
[self.view addConstraint:blueRight];
// 添加blueView的高度
NSLayoutConstraint *blueHeight = [NSLayoutConstraintconstraintWithItem:blueView
attribute:NSLayoutAttributeHeight
relatedBy:NSLayoutRelationEqual
toItem:nil // 没有参照view就传nil
attribute:NSLayoutAttributeNotAnAttribute//属性
multiplier:1
constant:40];
// [self.view addConstraint:blueHeight];
[blueView addConstraint:blueHeight];
// 设置 redView 顶部的约束
NSLayoutConstraint *redTop = [NSLayoutConstraintconstraintWithItem:redView
attribute:NSLayoutAttributeTop
relatedBy:NSLayoutRelationEqual
toItem:blueView
attribute:NSLayoutAttributeBottom
multiplier:1
constant:20];
[self.view addConstraint:redTop];
// 设置 redView 右侧的约束
NSLayoutConstraint *redRight = [NSLayoutConstraintconstraintWithItem:redView
attribute:NSLayoutAttributeTrailing
relatedBy:NSLayoutRelationEqual
toItem:blueView
attribute:NSLayoutAttributeTrailing
multiplier:1
constant:0];
[self.view addConstraint:redRight];
// 设置 redView 高度的约束
NSLayoutConstraint *redHeight = [NSLayoutConstraintconstraintWithItem:redView
attribute:NSLayoutAttributeHeight
relatedBy:NSLayoutRelationEqual
toItem:blueView
attribute:NSLayoutAttributeHeight
multiplier:1
constant:0];
[self.view addConstraint:redHeight];
// redView 宽度约束
NSLayoutConstraint *redWidth = [NSLayoutConstraintconstraintWithItem:redView
attribute:NSLayoutAttributeWidth
relatedBy:NSLayoutRelationEqual
toItem:blueView
attribute:NSLayoutAttributeWidth
multiplier:0.5
constant:0];
// 如果有参照就不要把约束添加到自己身上
[self.view addConstraint:redWidth];
}
@end