1. iPhone屏幕适配的原因和解决方案
初代 iPhone
2007 年,初代 iPhone 发布,屏幕的宽高是 320 x 480 像素。下文也是按照宽度,高度的顺序排列。这个分辨率一直到 iPhone 3GS 也保持不变。
那时编写 iOS 的 App(应用程序),只支持绝对定位。比如一个按钮(x, y, width, height) = (20, 30, 40, 50),就表示它的宽度是 40 像素,高度是 50 像素,放在(20, 20)像素的位置。
iPhone 4
2010 年,iPhone 4 发布,率先采用 Retina 显示屏,在屏幕的物理尺寸不变的情况下,像素成倍增加,达到 640 x 960 像素。
这样就出现一个问题,怎么让原有的 App 运行在新的手机上面?iPhone 手机一个优势,就是有众多优秀的 App,假如不兼容原有的 App,就相当于放弃这个得来不易的优势,是很不明智的。
为了运行之前的 App,apple 引入一个新的概念 point(点)。点这个概念在 iOS 开发中十分重要,而实际用户很少关注。iPhone 4 屏幕尺寸继续保持 320 x 480,不过单位并非是像素,而是点。
- 在 iPhone 3GS 中,1 个点等于 1 个像素
- 在 iPhone 4 中,1 个点等于 2 个像素
(也就是说,点跟像素可以直接互换)
iPhone 4 和 iPhone 3GS 的屏幕尺寸实际上是一样的,都是 3.5 英寸。都是 320 x 480,程序员使用的是 320 点 x 480 点,实际的像素和开发没有半毛钱关系。iPhone4 在使用图片的时候需要使用 @2x的图片。 iPhone 4 在单位英寸上像素更多,看起来更细腻。
在这之前的布局方式是直接写 frame 进行屏幕适配。
**iPad **
iPad 的物理尺寸是 768 x 1024 。界面变大了,加上 iPad 可以进行四个方向的旋转。相对于开发者来说就是横屏和竖屏。横竖屏的互换就会倒置 768 x 1024 进行互换。变为 1024 x 768 。
为了进行横竖屏的适配就必须加入横多的判断才行。
apple 推出了 Autoresizing 来进行屏幕的适配。 让控件随着父控件的拉伸而拉伸。(这种方式适配减少了很多的判断代码的书写)
通过简单的设置 Autoresizing 就可使之前的 app 进行横屏和竖屏适配。
iPad 的布局方式是直接写 **frame + Autoresizing ** 进行屏幕适配。
**iPhone 5 **
12 年 iPhone 5 的发布,一切都发生了改变。屏幕的物理尺寸变为 320 x 568。
这样就又出现了一个问题。 通过 frame 的方式进行屏幕的适配不是那么的方便了。需要在写 UI 界面的时候写很多的 if 语句来判断屏幕的尺寸进行 frame 计算和设置。多出来的 44 个点怎么搞。
iPhone5的屏幕将变为4寸,开发者即将面临为不同尺寸屏幕进行应用适配的工作。基于这样的情况,Apple大力推广使用AutoLayout的方法来进行UI布局,以一举消除适配的烦恼。
让更多地控件产生联系,可以约束各个控件之间的距离。
**iPhone 5c 和 iPhone 5s **
iPhone 5c 和 iPhone 5s 的发布对屏幕的适配没有产生什么影响。物理尺寸变为 320 x 568 , 尺寸还是 4 寸
iPhone 6 和 iPhone 6P
14 年发布 iPhone 6 和 iPhone 6P,一切又再一次发生了变化。 变化还非常的大。 iPhone 6 物理尺寸变为 375 x 667 iPhone 6P 物理尺寸变为 414 x 736。 特么完全摸不到边了有没有。
看完后疯了一堆人。 后来发现也没疯。基本使用的还是 AutoLayout 进行布局适配。
apple 同步的推出了 SizeClass, SizeClass 主要用于不同屏幕进行适配。
SizeClass 在后续的开发中基本没人用。 主要是不好用。
apple 屏幕适配的基本发展历程都在这里!
从写死的 frame 到 frame + Autoresizing 再到 autolayout 再到 sizecalss。
2.关于自动说明的概念说明
- Autoresizing :让控件随着父控件的拉伸而拉伸。
- autolayout:让更多地控件产生联系,可以约束各个控件之间的距离。
- sizecalss:根据不同设备尺寸进行布局。
Autolayout的2个核心概念
参照
约束
3. 使用 Autolayout 的方式
- 通过代码的方式添加约束
1.1. 使用默认的约束类添加约束
1.2. 使用 VFL 语言添加约束
1.3. 使用第三方封装的框架进行添加约束(Masonry) - 通过在 storyboard 里面可视化的添加约束.
4. 关于自动布局要注意的问题
- 要固定一个控件最多4个约束(有内建宽高的只需要2个约束就可以布局一个控件)
- 关于警告:
黄色警告:
表示当前控件的 Frame 和约束的 Frame 不符合 . 个人喜欢使用快捷键接解决问题: "cmd" + "option" + " =" 解决问题
红色警告:
1.1.表示 缺少约束 (控件的位置或大小不能确定)
1.2. 约束冲突 (控件的约束过多, 系统不知道跟随哪一个约束)
扩展阅读
IOS自动布局之Autoresizing
Autolayout及VFL经验分享
iOS自动布局进阶用法
Masnory进行autolayout等间隙排列
iOS屏幕适配
Autolayout
5月31日-Autoresizing
iOS开发- iPhone6/6 Plus适配