0421 AutoLayout的实践/基本使用
历史:
从iOS 6开始 ,之前都是3.5英寸没有考虑到适配.
iPhone5 变成了4英寸,所以推出了Auto Layout
理解:
另外一个体系,去描述位置.
像素:
点:
// 勘误: 图中的像素应为 “点"
![](https://app.yinxiang.com/shard/s21/res/f0882151-8ddc-4cc5-8364-9e2dfe03820a.png)
![](https://app.yinxiang.com/shard/s21/res/48adb412-343c-4e73-b7ea-c6319115386f.png)
// 写上以上代码,就可以删掉系统创建的控制器和storyBoard了.
// 创建控制器,勾选Xib
![](https://app.yinxiang.com/shard/s21/res/07360a20-525c-4336-ad34-89d133df0835.png)
拖一个uiview
背景改成红色.
按住cotroller 往右拖,选右边
![](https://app.yinxiang.com/shard/s21/res/2ab4d41d-c925-473a-87bb-eed3c6be7bb1.png)
![](https://app.yinxiang.com/shard/s21/res/27b3eca6-d940-42a7-8b76-557a23d6919d.png)
// 同理,选下边
// 在内部拖,height / width
![](https://app.yinxiang.com/shard/s21/res/e0fdcc16-fec5-4284-9672-25fa5a2233dd.png)
共有4步骤
这样如果是iPad项目(upsideDown默认是勾选了)
4个效果:
可以看到,无论屏幕怎么变化,距离都保持距离一定;
而且,本身的尺寸也没有变化.
// 1)
![](https://app.yinxiang.com/shard/s21/res/03328620-a61f-4338-bcd6-2918702c034a.png)
// 2)
![](https://app.yinxiang.com/shard/s21/res/112fad75-5361-4043-ad36-19b3d93e1843.png)
// 3)
![](https://app.yinxiang.com/shard/s21/res/a969375b-db19-439b-900a-a610613e79e4.png)
// 4)
![](https://app.yinxiang.com/shard/s21/res/8447f2ba-197f-4786-8eee-be64f09454ff.png)
注:
层次关系:
![](https://app.yinxiang.com/shard/s21/res/03509eb3-243d-4e6d-b3bb-6158a7811bd3.png)
![](https://app.yinxiang.com/shard/s21/res/c592977c-ebca-47e8-84a1-988c72bbc922.png)
// 控件居中:
1. bottom,
2. 内部height,width
3. 往上,如图: 有根竖线
![](https://app.yinxiang.com/shard/s21/res/7072fbfc-08f8-4e47-8778-7cf6f2701950.png)
// 可以让红色的保持与蓝色的相对位置变化
![](https://app.yinxiang.com/shard/s21/res/10af992e-eaa2-4628-9a86-20e27e8aac3d.png)
首先, 要确定蓝色控件的位置.
在确定红色参照蓝色的位置
![](https://app.yinxiang.com/shard/s21/res/0b0d5d1d-5136-454e-aed5-40cddf336de6.png)
![](https://app.yinxiang.com/shard/s21/res/bf4b33ca-bb97-4b52-aac7-126c46767504.png)
// 给蓝色添加约束:如图 , 记得点击Add按钮
![](https://app.yinxiang.com/shard/s21/res/7a344ad8-b746-4b37-a04b-c2db8b7e4ffc.png)
// 红色往蓝色上拖动,4种可以改动:
有横向,纵向:
![](https://app.yinxiang.com/shard/s21/res/c976b956-69b9-4572-8895-23ea501f4062.png)
![](https://app.yinxiang.com/shard/s21/res/fec254a5-6bf2-49f1-84a3-b833b85410f1.png)
让红色的按钮,和蓝色按钮的宽和高
![](https://app.yinxiang.com/shard/s21/res/dbda0d1d-0b86-47ee-9bbb-9c81182d1e9a.png)
// 约束也可以拖到.n文件
![](https://app.yinxiang.com/shard/s21/res/c0dd8ed4-f3c4-47a6-b2a2-08307385a87c.png)
// 于是就可以在系统中改变值.
![](https://app.yinxiang.com/shard/s21/res/59d44385-f247-4398-9304-c76888850daa.png)
// 改进: 可以加动画
![](https://app.yinxiang.com/shard/s21/res/ff81ea60-204c-47a8-b72a-03c9d3fdddff.png)
// 改两个方向
需求:
1) 3个间距一样.
横屏时候: // 可以理解为iphone6 plus
![](https://app.yinxiang.com/shard/s21/res/f0b7152c-ad92-4080-ae37-868f44817030.png)
// 可以理解为 iPhone4s
![](https://app.yinxiang.com/shard/s21/res/38e8acce-1587-47ca-9e88-c75d69befc40.png)
// 改变宽度参照的倍数.
![](https://app.yinxiang.com/shard/s21/res/e291b495-849b-484d-95e7-b8fa3322c37e.png)
// 经验:
拖textField左右边距固定;
先放控件,再添加约束!!!
![](https://app.yinxiang.com/shard/s21/res/bc54842e-ee2c-401b-a16c-364f25541687.png)
// btn 5个约束(底)
上下左右高度
这个底部约束,拖控件,然后其他控件都相对往上升.
![](https://app.yinxiang.com/shard/s21/res/421d63ab-a6dd-4146-b9a8-a4e26995a2d1.png)
// 倒数第二个 4个约束
左右上高度(下面已经添了)
// 最上那个, 3个约束
左右高度(上面一定不能添,要不然会有冲突)
左,上面一定不要(系统冲突了,不知道你要怎么放了)
// 按钮底部的约束拖线
// 监听键盘出来和消失
![](https://app.yinxiang.com/shard/s21/res/b3cddbb5-f565-4603-9e02-f634e170753d.png)
![](https://app.yinxiang.com/shard/s21/res/54d38977-d388-4ad2-8f6b-0e8c57424a77.png)
// 好习惯: 顺手把析构函数写了
![](https://app.yinxiang.com/shard/s21/res/43ceb722-8322-4d7e-ac85-a3672bd7ce71.png)
// 接下来完成键盘出现和消失的事件:
![](https://app.yinxiang.com/shard/s21/res/aa01d226-a3b9-4eac-84a0-c1a28bca38d5.png)
![](https://app.yinxiang.com/shard/s21/res/a3de91f7-b116-47ee-af67-5dc181dc78f3.png)
代码: // 别忘了layoutIfNeeded
![](https://app.yinxiang.com/shard/s21/res/4dc25678-2884-428f-9e5f-9f01684e84c0.png)
// 不能用"加等于"
![](https://app.yinxiang.com/shard/s21/res/daf8c040-bd0e-48f3-b51d-c8ec48cdd814.png)
// 接下来完善键盘降下来的操作.
减等于
以上告一段落
要确定一个控件的位置,需要几个约束?
4个
不够描述的时候,会报错.
![](https://app.yinxiang.com/shard/s21/res/d601d100-a9b4-4ace-b3da-30ecc2820e10.png)
// 约束多了或者少了都会报错
![](https://app.yinxiang.com/shard/s21/res/3186ddef-5bc6-484e-b389-d526d6125e0c.png)
// 修改
![](https://app.yinxiang.com/shard/s21/res/43adfaa7-4c41-4503-8be1-c2e8c648fc3d.png)
// 补充:
如果想用代码写:
![](https://app.yinxiang.com/shard/s21/res/5e9ab565-6b7a-499a-8992-675efb55908e.png)