版本记录
版本号 | 时间 |
---|---|
V1.0 | 2018.04.14 |
前言
iOS中的视图加载可以有两种方式,一种是通过xib加载,另外一种就是通过纯代码加载。它们各有优点和好处,xib比较直观简单,代码比较灵活但是看着很多很乱,上一家公司主要风格就是用纯代码,这一家用的就是xib用的比较多。这几篇我们就详细的介绍一个xib相关知识。感兴趣的可以看上面写的几篇。
1. xib相关(一) —— 基本知识(一)
2. xib相关(二) —— 文件冲突问题(一)
3. xib相关(三) —— xib右侧标签介绍(一)
4. xib相关(四) —— 连线问题(一)
5. xib相关(五) —— 利用layout进行约束之界面(一)
约束的设置
首先拖进去一个控件
可以先按照下面进行设置
设置距左距上100,宽高都是100,那么就可以设置Frame了,可以唯一的确定UI控件的布局。
我们看一下右侧标签的约束
我们也可以在这里修改约束,比如高度设置为200。双击高度这个约束,在下面这个标签里面进行修改。
修改Constant
进行修改,这里我们修改为200。
这时候再看右侧约束
高度成功的修改为了200。
记住约束的公式:view1.attr1 relation view2.attr2 x multiplier + constant 。relation、multiplier、constant都是可以设置的。
说明
1. layout和frame
不使用auto layout
时是可以在viewDidLoad
里设置frame的,一旦开启了auto layout,就要注意,通常在viewDidLoad
中设置frame就不再生效,因为iOS5加入的viewWillLayoutSubviews
会在viewDidLoad
之后调用,而该函数会在执行的时候去加载该文件对应的xib设置的约束,就是说在viewDidLoad
中设置frame的时机太早了,没有生效就又改成了xib中的样子,而且在viewWillLayoutSubviews
中修改frame也是不生效的。
有两个解决办法:
方法1
在viewDidLayoutSubviews
中修改frame,这是最简单的方法。
方法 2
选中xib中的约束像拖动其他控件一样,将其拖动成为IBOutlet
的属性或全局变量,
@property (weak, nonatomic) IBOutlet NSLayoutConstraint *viewWidthConstraint;
- (void)viewWillLayoutSubviews
{
[super viewWillLayoutSubviews];
//通过修改约束达到修改布局的效果
self.viewWidthConstraint.constant = 200;
}
注意这种修改NSLayoutConstraint对象的方法,可以在viewWillLayoutSubviews
里面进行修改,也可以在viewDidLoad
进行修改,这两个地方都是可以的。
如果要在修改的地方进行动画,可以参考下面进行:
[UIView animateWithDuration:1 animations:^{
self.viewWidthConstraint.constant = 200;
//这句话很重要,只有重新布局才会产生动画效果,否则没有动画效果
[self.view layoutIfNeeded];
}];
后记
本篇主要讲述了利用layout进行约束之说明和注意事项,感兴趣的给个赞或者关注~~~