代码如下:
- (void)viewDidLoad
{
[super viewDidLoad];
self.title = @"NSLayoutConstraint适配";
//创建imgView1
imgView1 = [[UIImageView alloc] init];
imgView1.image = [UIImage imageNamed:@"1"];
[self.view addSubview:imgView1];
//创建imgView2
imgView2 = [[UIImageView alloc] init];
imgView2.image = [UIImage imageNamed:@"3"];
[self.view addSubview:imgView2];
//不对imgView1使用autoResizing(使用autolayout就不能使用autoResizing)
imgView1.translatesAutoresizingMaskIntoConstraints = NO;
imgView2.translatesAutoresizingMaskIntoConstraints = NO;
[self addMyLayoutConstriant];
}
#pragma mark 代码添加约束
- (void)addMyLayoutConstriant
{
//代码创建约束
//NSLayoutConstraint 是创建约束对象的类名
/************imgView1*************/
//创建imgView1的上边的约束
//第一个参数:要约束的视图对象(也就是要对哪一个视图添加约束)
//第二个参数:要添加的约束的属性类型,(也就是要添加的是上 下 左 右 宽 高 等这些属性)
//第三个参数:相对关系,分为 等于 小于 大于
//第四个参数:相对于哪一个视图对象
//第五个参数:相对视图的哪一个属性 ,比如 上 下。。。
//第六个参数:乘数 倍数,(也就是第一个视图的属性值是第二个视图属性值得倍数)通常是1.0
//第七个参数:常量
/*
以上几个参数 综合起来组成了一个表达式:
item1的属性值 =/<=/>= 第二个视图的属性值 * multiplier + constant
即:第一个视图的属性值 =/<=/>= 第二个视图的属性值 * 倍数 + 常量
*/
//上约束 20
NSLayoutConstraint *imgView1Top = [NSLayoutConstraint constraintWithItem:imgView1 attribute:NSLayoutAttributeTop relatedBy:NSLayoutRelationEqual toItem:self.view attribute:NSLayoutAttributeTop multiplier:1.0 constant:84];
//添加约束,约束添加在父视图上,因为布局是相对于父视图来布局
[self.view addConstraint:imgView1Top];
//左约束 20
NSLayoutConstraint *imgView1Left = [NSLayoutConstraint constraintWithItem:imgView1 attribute:NSLayoutAttributeLeft relatedBy:0 toItem:self.view attribute:NSLayoutAttributeLeft multiplier:1.0 constant:20];
[self.view addConstraint:imgView1Left];
//下约束 20
NSLayoutConstraint *imgView1Bottom = [NSLayoutConstraint constraintWithItem:imgView1 attribute:NSLayoutAttributeBottom relatedBy:0 toItem:self.view attribute:NSLayoutAttributeBottom multiplier:1.0 constant:-20];
[self.view addConstraint:imgView1Bottom];
//右约束 20
NSLayoutConstraint *imgView1Right = [NSLayoutConstraint constraintWithItem:imgView1 attribute:NSLayoutAttributeRight relatedBy:0 toItem:imgView2 attribute:NSLayoutAttributeLeft multiplier:1.0 constant:-20];
[self.view addConstraint:imgView1Right];
/************imgView2*************/
//可以相对于self.view 也可以相对于imgView1 设置imgView2的约束
//上 20
NSLayoutConstraint *imgView2Top = [NSLayoutConstraint constraintWithItem:imgView2 attribute:NSLayoutAttributeTop relatedBy:0 toItem:imgView1 attribute:NSLayoutAttributeTop multiplier:1 constant:0];
//右 20
NSLayoutConstraint *imgView2Right = [NSLayoutConstraint constraintWithItem:imgView2 attribute:NSLayoutAttributeTrailing relatedBy:0 toItem:self.view attribute:NSLayoutAttributeTrailing multiplier:1.0 constant:-20];
//下 20
NSLayoutConstraint *imgView2Bottom = [NSLayoutConstraint constraintWithItem:imgView2 attribute:NSLayoutAttributeBottom relatedBy:0 toItem:imgView2.superview attribute:NSLayoutAttributeBottom multiplier:1 constant:-20];
//等宽约束
NSLayoutConstraint *equalWidth = [NSLayoutConstraint constraintWithItem:imgView2 attribute:NSLayoutAttributeWidth relatedBy:0 toItem:imgView1 attribute:NSLayoutAttributeWidth multiplier:1 constant:0];
//一次性添加多个约束
[self.view addConstraints:@[imgView2Top,imgView2Right,imgView2Bottom,equalWidth]];
//约束还可以修改 删除 设置是否有效
//修改
//imgView1Bottom.constant = imgView1Bottom.constant + 20;
//删除约束
//删除单个约束
//[self.view removeConstraint:imgView1Bottom];
//删除多个约束
//[self.view removeConstraints:@[imgView1Bottom,imgView1Left]];
//使约束失效 和 继续有效
//让某些约束失效
//[NSLayoutConstraint deactivateConstraints:@[imgView1Left,imgView1Right]];
//让某些约束继续有效
//[NSLayoutConstraint activateConstraints:@[imgView1Right,imgView1Left]];
}