1.自动布局
1.1 autoresizing的介绍
1.1.1 六根线
与父控件之间的关系,外面有四根线 控制和父控件之间的边距
是否随着父控件的变化而变化
中间的 两根线 设置是否随父控件的 变化而变化
1.1.2 弊端
它是 相对于父控件进行设置的,当想设置兄弟 控件之间的 约束时, 办不到,无法设置
代码实现 默认的约束是 左上 .
self.redView.autoresizingMask
1.2 autolayou
子控件之间的相对关系的设定.
中的四个按钮:
1. 将控件按照 类似于集装箱的样式进行 排列
2. 设置zi控件之间的 排版关系 (多个按钮的相对位置)
3. 设置子控件的 具体位置,大小,和与父控件的 margin
4. 更新 约束的 相对frame
1.2.1 约束的使用
当使用 frame的时候,需要设置x y w h 四个信息
当使用约束的时候, 也必须包含 x y w h 四个信息
1.2.2 设置约束时的 警告
红色警告 : 1. 约束条件不足,(x y w h 四个条件有缺失)
2. 约束条件有冲突 (改变约束的时候 先删除之前的约束 )
黄色警告 : x y w h 都有设置,但是展示的位置 与 约束的位置 不一
解决方法 : update frame
1.2.3 设置控件之间的约束
- 控件处于界面的 边界处, 建议以父控件为基准
- 控件包含具体值的约束和相对的约束,先设置具体的约束
- 一个控件 一个的设置约束
- 复制控件的时候 先把之前控件的 约束全部删除,避免约束的冲突
案例实现
- 在界面上 有一个蓝色的View ,距离上 左 右 各有20 个间距 高度是70
- 在蓝色的VIew 下方有一个 红色的View , 红色的View 距离蓝色的View 有 20 的距离
- 红色的View和蓝色的 VIew 左对齐
- 红色的View的高度 与蓝色一致 ,高宽是蓝色的一半
约束的核心计算公式
firstItem = secondItem * multiplier + constent ;
constent 相对偏移量 (注意正负的取值)
注意 :当一个控件里面有内容的时候可以只设置 x y 不设置 w h , 控件的w h 会根据内容来获取
1.3使用代码添加 约束
1.3.1 先取消autoresizing
blueView.translatesAutoresizingMaskIntoConstrains = NO;
1.3.2 设置约束
firstItem = secondItem * multiolier + constent ;
//第一个参数:WithItem :代表的是 firstItem
//第二个参数:attribute:NSLayoutAttributeTop 要做约束的线是那一条
//第三个参数:relatedBy 比较的方式 = <= >=
//第四个参数:toItem 代表的是secondItem 第二个控件
//第五个参数:attribute:<#(NSLayoutAttribute)#> 相对于第二个控件的什么位置
NSLayoutConstraint *blueViewTop = [NSLayoutConstraint constraintWithItem:blueView attribute:NSLayoutAttributeTop relatedBy:NSLayoutRelationEqual toItem:self.view attribute:NSLayoutAttributeTop multiplier:1 constant:20];
注意:约束 添加的(约束由那个控件进行添加),如果不存在比较关系 –> 约束放在自身, 如果存在比较关系 –> 就去找比较控件他们相同的父控件 然后添加,
[self.view addConstrain:blueViewTop] ;