自动布局的核心计算公式:
obj1.property1 =(obj2.property2 * multiplier)+ constant value
现在要实现一个效果:
一个红色View,宽高都是100,一直在右下角,右边间距20,底部间距20,实现代码如下:
UIView *redView = [[UIView alloc] init];
redView.backgroundColor = [UIColor redColor];
// 要先禁止autoresizing功能,设置view的下面属性为NO
redView.translatesAutoresizingMaskIntoConstraints = NO;
[self.view addSubview:redView];
/*
view1 :要约束的控件
attr1 :约束的类型(做怎样的约束)
relation :与参照控件之间的关系
view2 :参照的控件
attr2 :约束的类型(做怎样的约束)
multiplier :乘数
c :常量
*/
// 一个NSLayoutConstraint对象代表一个约束
NSLayoutConstraint *width_lc = [NSLayoutConstraint constraintWithItem:redView attribute:NSLayoutAttributeWidth relatedBy:NSLayoutRelationEqual toItem:nil attribute:NSLayoutAttributeNotAnAttribute multiplier:0 constant:100];
[redView addConstraint:width_lc];
NSLayoutConstraint *height_lc = [NSLayoutConstraint constraintWithItem:redView attribute:NSLayoutAttributeHeight relatedBy:NSLayoutRelationEqual toItem:nil attribute:NSLayoutAttributeNotAnAttribute multiplier:0 constant:100];
[redView addConstraint:height_lc];
NSLayoutConstraint *right_lc = [NSLayoutConstraint constraintWithItem:redView attribute:NSLayoutAttributeTrailing relatedBy:NSLayoutRelationEqual toItem:self.view attribute:NSLayoutAttributeTrailing multiplier:1 constant:-20];
[self.view addConstraint:right_lc];
NSLayoutConstraint *bottom_lc = [NSLayoutConstraint constraintWithItem:redView attribute:NSLayoutAttributeBottom relatedBy:NSLayoutRelationEqual toItem:self.view attribute:NSLayoutAttributeBottom multiplier:1 constant:-20];
[self.view addConstraint:bottom_lc];
在这里就要考虑一个问题,代码实现的约束要添加到哪一个控件呢?具体规则又是怎样的呢?
-
规则1:对于两个同层级view之间的约束关系,添加到它们的父view上
图 1.png
-
规则2:对于两个不同层级view之间的约束关系,添加到他们最近的共同父view上
图 2.png
-
规则3:对于有层次关系的两个view之间的约束关系,添加到层次较高的父view上
图 3.png
网友评论