xib相关(六) —— 利用layout进行约束之说明和注意事项(二)

版本记录

版本号 时间
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进行约束之说明和注意事项,感兴趣的给个赞或者关注~~~

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容