首先来简单的认知屏幕适配的发展历史
-
iPhone3GS\iPhone4
- 屏幕尺寸固定,没有屏幕适配
- 全部用frame、bounds、center进行布局
- 很多值固定:坐标值、宽度高度值全部写死,网上一些老的代码都是这样的
UIButton *btn = [[UIButton alloc] init];btn.frame = CGRectMake(0, 0, 320 - b, 480 - c);UIView *view = [[UIView alloc]init];view.frame = CGRectMake(20,20,50,100);...
⚠完全没有适配可言,全部是固定的值
-
iPad出现、iPhone横屏
- 出现Autoresizing技术
- 让横竖屏适配相对简单
- 让子控件可以跟随父控件的行为自动发生相应的变化
- 现在使用的前提是:需要关闭Autolayout功能
- 局限性
- 只能解决子控件跟父控件的相对关系
- 不能解决同级控件之间的相对关系
- 出现Autoresizing技术
- iOS 6.0(Xcode4)开始
- 出现了Autolayout技术
- 从Xcode5.0(iOS 7.0)开始,开始流行Autolayout
Autolayout讲解
-
storyboard和xib上Autolayout的使用
- Add New Constrains 设置单个控件的约束能设置很多约束,详解见图
- 点击
会出现下图,还是较清楚的解释:
- 在iOS8中加入了一个constrain to margins
-
系统默认帮你选中,则会依照layoutMargins的位置作为起点来进行约束,左右会有8个点的空挡,而是从8个点后开始计算约束,而没有选中时,从屏幕的0点开始计算。(一般我都直接取消选中,不然会与预想的不一样,不知道你们有么有遇见过这样的问题)
-
Update Frames 有三个选项
-
默认是None在约束后不会有位置发生变化,但会出现一个黄色的框框,就是你新约束的frame,并且这个时候会有个黄色警告箭头表示当前view的frame不匹配,需要更新frame。
! 点击黄色尖头后会告诉你警告的原因.
-
还有个红色的箭头,表示当前有错误约束:1.约束冲突,需要删除冲突的部分条件。2.约束条件不完善,需要添加完善约束(就是让编译器明确view的frame)
- 选中Items of New Constrains会设置新frame同时把选中的控件的frame更新,即不会出现黄色框框。
- 选中All Frames in container,如果你所有的控件都已经约束好了,那可以选择这个选项,一次性更新所有的控件。
-
Add New Alignment Constrains 设置多个控件之间的约束
点击
以上两个按钮能满足你大多数的控件约束,也非常的方便,当你想修改之前约束的条件,方法也非常多。
- 选中控件然后点击
会出现当前控件的约束
点击约束条件中的Edit就可以修改当前设置。 - 删除原先约束,重新设置约束,比较笨的方法但也是可以达到效果。
- 还可以直接选中storyboard或xib中控件约束好的线,双击也是能修改的
看个人爱好吧!
- 对于删除错误的约束也有多种方法
图中选中的红框中,都可以删除某一条约束。 - 还有一次性删除约束的方法
图中有两个Clear Constrains,上面的代表清除当前选中view的所有约束,下面的会清除所有view的约束,不管是否选择,所以不要轻易选择下面的Clear Constrains,以免之前约束都作废,还是会让人抓狂滴。
- 对于删除错误的约束也有多种方法
- 选中控件然后点击