代码实现方式不比图形界面妥妥拽拽几下那么爽,一根线需要大概3行代码,所以导致一个完整约束的代码量看起来很繁琐。
以下为一个实例,表示一个蓝色的100*100的色块粘着着父控件右下角显示:
UIView *blueView = [[UIViewalloc]init];
blueView.backgroundColor = [UIColorblueColor];
[self.viewaddSubview:blueView];
blueView.translatesAutoresizingMaskIntoConstraints =NO;
// 宽度约束:100
NSLayoutConstraint *widthConstraint = [NSLayoutConstraint constraintWithItem:blueView
attribute:NSLayoutAttributeWidth
relatedBy:NSLayoutRelationEqual
toItem:nil
attribute:NSLayoutAttributeNotAnAttribute
multiplier:0.0
constant:100];
[blueView addConstraint:widthConstraint];
// 高度约束:100
NSLayoutConstraint *heightConstraint = [NSLayoutConstraint constraintWithItem:blueView
attribute:NSLayoutAttributeHeight
relatedBy:NSLayoutRelationEqual
toItem:nil
attribute:NSLayoutAttributeNotAnAttribute
multiplier:0.0
constant:100];
[blueView addConstraint:heightConstraint];
// 右边约束,距离父控件的右边有10的间距
NSLayoutConstraint *rightConstraint = [NSLayoutConstraint constraintWithItem:blueView
attribute:NSLayoutAttributeRight
relatedBy:NSLayoutRelationEqual
toItem:self.view
attribute:NSLayoutAttributeRight
multiplier:1.0
constant:-10];
[self.viewaddConstraint:rightConstraint];
// 底部约束,距离父控件的底部有10的间距
NSLayoutConstraint *bottomConstraint = [NSLayoutConstraint constraintWithItem:blueView
attribute:NSLayoutAttributeBottom
relatedBy:NSLayoutRelationEqual
toItem:self.view
attribute:NSLayoutAttributeBottom
multiplier:1.0
constant:-10];
[self.viewaddConstraint:bottomConstraint];
blueView.translatesAutoresizingMaskIntoConstraints = NO;
这句代码表示如果使用了Autolayout自动布局方式的话,以前的Autoresizing模式下的相关的设定会自动转换成Autolayout模式下的约束,默认情况下是为YES,表示会自动转换,这就会导致下面的4个约束设定有可能会跟自动转换的约束发生冲突,所以每当使用Autolayout自动布局的时候,都应该把这个属性设置为NO。
参数解读:
* constraintWithItem:表示对哪个控件进行约束设置
* attribute:设置控件的哪个属性(宽,高,对上,下,左,右的间距)
* relatedBy:与下一个对比控件的关系,为等于(equal),大于(greater),小于(less)
* toItem:相对于哪一个控件(如果没有设置nil)
* attribute:相对的那个控件的哪个属性(如果没有设置NSLayoutAttributeNotAnAttribute)
* multiplier:乘数
* constant:加数