【AutoLayout案例07-如何通过代码添加约束 Objective-C语言】

一、那么,接下来,我们就给大家介绍一下,如何通过代码,来实现这个AutoLayout

通知

1.咱们之前是不是都是通过,storyboard、来拖、拉、拽、的方式实现的吧

现在给大家介绍一下,如何通过代码,来实现

在继续介绍,如何通过代码,来实现AutoLayout之前呢,

我们先要给大家补充一个知识,就是我们添加约束的时候,是把这个约束添加给谁了

通知

这个知识,要给大家补充一下

好,来看

通知

那么,我先把这个,给大家关掉,来,看一下

我新建一个项目

通知

选择File-New-Project

通知

选择这个Single View Application

为一个控件,增加约束,这个约束,是增加给谁了,这个要注意

通知

Name:009添加约束规则

注意看,打开我们这个storyboard,我在这里拽一个什么啊,拽一个按钮吧

通知

拽一个按钮

通知

拽一个按钮,然后呢,设一下这个按钮的背景色

通知

设一个红色吧

通知

好,然后,接下来,我是不是要给这个按钮,增加约束,

这个按钮,现在是不是一个约束也没有

好,我现在给这个按钮增加一下约束,约束一下这个按钮的高和宽

通知

约束按钮的宽,是100

约束按钮的高,是100

通知

然后呢,点一下增加

增加两个约束,好,一增加

通知

然后呢,这个按钮,是不是先给它增加了一个高和宽了吧

先别给它去掉那个错误的警告

注意,刚才我仅仅是给按钮约束了一个高和宽

然后,我们看一下,左边,这个场景里面,Scene,里面

通知

右边这个控制器,叫一个故事板,左边这个叫一个场景

一个故事、一个场景

OK,这个场景,场景里面,看一下这个按钮,按钮里面,是不是有一个Constraints了

通知

约束吧,约束里面呢

通知

是不是有一个高、和宽、这一个约束

也就是说,当我们为一个控件,增加一个约束的时候,

如果说,这个约束,不依赖于其他控件的时候,

什么叫不依赖于其他控件的时候,

你设置这个控件的宽、和高,就是写了吧,高就是写了100,

这个时候,不依赖于其他控件吧

比如说,你设置这个控件的高,等于别的控件的高

这个时候,你设置这个控件的高,是不是依赖于别的控件了

或者说,你设置这个控件,距离父控件左边距离,这个时候,这个约束,是不是也依赖于父控件了,要用到父控件啊

就是说,当你为控件设置一个约束,不依赖于别的控件的时候,这个时候,这个约束是,增加到这个控件自己上

通知

是不是增加到这个控件自己上的约束啊

那么,这是第一个

1)当设置一个约束,不依赖于任何其他控件的时候,这个约束,会增加到当前控件的自己身上

OK,这是我们第一个要说的

通知

看看

通知

OK,就是这点,

通知

如果添加的约束和其他控件没有关系,就会添加到自己身上

意思就是说,你这个控件,增加这个约束,不依赖于任何别的控件,

自己就可以写完,比如100,100,高、和宽,都是100

不依赖于别的控件,那么它这个约束,就会增加到控件自己身上

这是第一个

通知

就相当于我们刚才这样,增加高和宽,都是写的100,不依赖于别的控件,那么这个约束,就会增加到这个控件自己的身上

通知

好,再看一下

2)比如说,让这个按钮,注意看,让这个按钮,让它,水平居中对齐、垂直居中对齐

通知

点击增加

注意,这个Constraints

通知

水平居中对齐、垂直居中对齐

通知

通知

注意,这个水平居中对齐、垂直居中对齐

这个约束,是增加到哪儿了

增加到这个按钮的父控件上了吧

通知

是不是,也就是说,当这个约束,是相对于

通知

当设置子控件的一个约束,这个约束,要用到父控件的某个值

这个时候,这个约束,就会增加到,父控件上

通知

OK,把这个警告解决一下

通知

解决,Fix Misplacement

通知

OK

通知

好,这是我们的第二个情况

通知
通知

OK,看一下,

2)如果是父子关系,设置子控件的约束,约束会添加到父控件上

通知

并不会增加到这个子控件上

只有一种情况,会增加到子控件上,就是设置这个控件的约束的时候,它不依赖于任何的控件,自己就能设置,只有这种情况,这个约束,会增加到控件自己身上

那么,比如说,其他情况,

1)第一种情况,设置这个控件的约束,和父控件有关,是父子关系的时候,这个约束,会添加到父控件身上

2)第二种情况,如果是父子关系,设置子控件的约束,约束会添加到父控件上

通知

3)OK,那么,接下来,我们再看第三个

我这里,再来一个按钮

通知

再来一个按钮,

这个按钮

通知

这个按钮叫做Button01

通知
通知

我设置这个按钮(Button01)和这个红色的按钮,让它俩的高和宽相等,让它俩的宽和高,等宽、等高

通知

点击增加

设完以后,注意看,这儿会加东西吗

通知

走一个

通知

增加了没,加了吧

也就是说,当你设置两个兄弟之间,有相互依赖关系的时候,这个依赖关系,也会添加到这两个兄弟的父控件上

这是我们的哪幅图啊,

通知

就是我们的这幅图

通知

当设置两个兄弟之间的依赖的时候,这个兄弟之间的依赖约束,也会添加到父控件上

通知

同一个层级间的约束关系,都会添加到父控件上

通知
通知

更严谨一点儿,应该这么说,

通知

注意看

通知

因为当前我们这个Button

通知

Button和Button01,它俩的父控件,是不是都是这个View啊

它俩的父控件,都是这个View

所以,当你设置它俩相关的关系的时候,它俩之间的关系,这个约束,会添加到它俩共同的父控件下面吧

4)当设置两个

通知

当设置两个控件,它俩相关,设置这个控件,跟这个控件

相关,它俩相关联,那么,这个时候,这个约束,会加到哪儿呢

会加到它俩的共同的父控件上

它的父控件,是这个

通知

它的父控件,是这个

通知

只有这个,是不是才是它俩共同的父控件啊

通知

所以说,当设置两个控件,兄弟控件,它俩的关系的时候,那么,这个时候,它会找到这两个控件共同的父控件,会把约束添加到,它俩的共同的父控件上,

明白了吗,这就是为什么,刚才

通知

设了一堆约束以后,有的约束,在这个按钮下面

通知

有的约束,在这个父控件的下面

通知

咱们刚才写了一堆约束,大部分约束,是不是,都是我们兄弟关系之间的约束

和父子之间的约束

所以说,大部分,是不是都加到这个父控件,控制器View下面,都加到这个地方了

通知

这是这里要给大家补充的,创建约束的时候,这个约束到底是创建到谁上面了,

1)如果说,这个约束,是自己、不依赖于任何一个别人,就是创建到自己身上,

2)如果说,它是兄弟的关系

通知

就创建到它共同的父元素上

3)如果是堂兄弟的关系,

通知

就创建到共同的父控件上

通知

如果是父子关系的话,肯定就直接加到父控件上了

OK,那么,我们为什么要说这个东西呢

我们写代码,通过代码,来创建约束的时候,你创建完的约束,这个约束,是要加到哪个子控件上啊

这个时候,你是不是得知道这个规则啊

1)如果说,这个约束,没有依赖于任何的控件

那么,这个约束,就加到当前控件自己的身上

猜你喜欢

转载自blog.csdn.net/madoca/article/details/132494039