自动布局的发展
1.frame:通过代码计算 frame
iPhone3GS iPhone4 iPhone4S 屏幕的物理尺寸是一样的(无需屏幕适配), 而且一个当时的应用要么是横屏要么是竖屏, 不存在能同时进行横竖屏切换的应用
2.autoresizing :
autoresizing是UIView的属性,一直存在,使用也比较简单,但是没有autolayout那样强大。如果你的界面比较简单,要求的细节没有那么高,那么你完全可以使用autoresizing去进行自动布局
随着iPad 的发布, 屏幕物理大小发生了变化, 并且要求部分应用程序实现横竖屏切换,所以不能把控件的 frame 都写死了,需要进行屏幕适配。
Autoresizing的核心思想就是:参照父容器来设置子控件的 frame。不再写死 frame, 而是参照。
举例: 在竖屏下有一个按钮要占据整个屏幕宽度, 当切换到横屏下以后同样要占据整个屏幕的宽度
3.Auto Layout:
- Auto Layout是一种“自动布局”技术,专门用来布局UI界面的
- Auto Layout自iOS 6开始引入,由于Xcode 4.5的不给力,当时并没有得到很大推广
- 自iOS 7(Xcode 5)开始,Auto Layout的开发效率得到很大的提升
- 苹果官方也推荐开发者尽量使用Auto Layout来布局UI界面
- Auto Layout能很轻松地解决屏幕适配的问题
iOS有两大自动布局利器:autoresizing 和 autolayout(autolayout是IOS6以后新增)
随着 iPhone5 iPhone5s 等的发布苹果设备不同尺寸的屏幕变得越来越多, 不仅要求能根据控件父子关系来设置相对位置, 也要求能根据”任意”控件之间的关系来设置位置
因为 Autoresizing只能设置当前控件与父控件之间的相对关系, 当遇到要设置兄弟控件之间的关系的时候 Autoresizing就无能为力了
举例: 在竖屏下, 屏幕底部有两个按钮, 这两个按钮的间距为一个固定的值(宽度不指定);
当切换为横屏的时候要求这两个按钮还显示在屏幕底部, 并且按钮间的间距不变, 按钮可以随之变宽。
使用AutoLayout
4.Size Classes :
在iOS8中,新增了Size Classes特性
看时间作为补充, 今天的主要内容是"Auto Layout”
当 iPhone6发布以后, 苹果设备的屏幕越来越多(以后也可能出现更多不同大小的屏幕), 为了能更容易的适配不同的屏幕, 苹果推出了Size Classes 技术
通过 AutoLayout设置的约束, 约束一旦添加就会应用于各种屏幕(也就是说在各种不同的屏幕下都使用相同的约束)
通过 Size Classes + Auto Layout的方式, 可以为不同尺寸的屏幕设置不同的约束
- 举例: 在3.5 inch的屏幕下希望某个按钮紧贴屏幕上边显示, 但是当屏幕变成5.5 inch以后, 则希望该按钮显示到屏幕的正中央
- Size Classes技术主要解决的问题: 为不同尺寸的屏幕, 通过 Auto Layout设置不同的约束。
- 使用注意
- 注意: 无论是通过 Autoresizing 还是 Auto Layout其实只是间接设置了控件的 frame, 所以一旦使用了 Autoreszing 或者 Auto Layout之后,就不要在直接设置 frame了, 否者可能产生混乱”冲突”。
- 苹果强烈建议使用Auto Layout,所以在创建新的项目时已经默认帮我们选择使用Auto Layout ,由于Autoresizing 和Auto Layout二者是互斥的,同时只能使用其中一种,要想使用Autoresizing的时候必须先禁用Auto Layout