最近在做关于iPhone6,6+,以及你给iOS8 的适配。
在此做一小结。
iOS多屏幕中适配的实现设计到以下几个方面。
1、宏定义:
原理:通过定义宏定义获取屏幕的宽高,从而可以动态定位视图中元素的大小和位置。
适用于: 屏幕尺寸较少,内容显示单一,满足于元素放大、缩小等较单一的呈现。
缺点:随着iPhone设备种类的增多,屏幕尺寸趋于多样化,此方式的实现变的复杂。 若需求为,针对不同的平布尺寸,屏幕显示的内容多少不同, 方式不同,
这样的需求,宏定义实现起来也是相当的复杂。
2、autolayout:
基于约束:和以往定义frame的位置和尺寸不同,AutoLayout的位置确定是以所谓相对位置的约束来定义的,比如x坐标为superView的中心,y坐标为屏幕底部
上方10像素等。
描述性 : 约束的定义和各个view的关系使用可视化语言的方法来进行描述。
布局系统 : 用来负责界面的各个元素的位置。
优点:解决了不同分辨率和屏幕尺寸下view的适配问题,另外也简化了旋转时view的位置的定义。
3、sizeclass
原理:Size Classes其实就是将iOS设备屏幕的Size进行分类,宽度和高度都各分为3种情况:紧凑(Compact)、规则
(Regular)、任意(Any),其中“任意”(Any)包含
紧凑(Compact)、规则(Regular)类型。3x3共9种Size,每种Size都可以设置特定的一套布局,如果不特殊指定,默认是在(宽任意,高任意)模式下设置,
且其他8种布局继承它。Size Classes是将屏幕尺寸的种类做了进一步的抽象。
优点:Autolayout的出现使得布局的复杂度减少到了View与View的关系上,再由根 View(也就是屏幕)指定frame,随后所有子View相对布局,把frame的概念 归一化到根View的frame上;但有了Size
Class后,根视图的frame概念也被移除了,这下整个app的UI和frame这个单词已然脱离关系,这也正是apple想
要达到的目。
通过SizeClasses简单的表达如下:
iPhone4S,iPhone 5/5s,iPhone 6
竖屏:(w:Compacth:Regular)
横屏:(w:Compacth:Compact)
iPhone6Plus
竖屏:(w:Compacth:Regular)
横屏:(w:Regularh:Compact)
iPad
竖屏:(w:Regularh:Regular)
横屏:(w:Regularh:Regular)
AppleWatch(猜测)
竖屏:(w:Compacth:Compact)
横屏:(w:Compacth:Compact)
4、关于图片:
物理尺寸 分辨率 图片 尺寸
iPhone 3gs 320*480 320*480 @1x 3.5
iPhone 4, 4s 320*480 640*960 @2x 3.5
iPhone 5, 5s 320*568 640*1136 @2x 4.0
iPhone 6, 375*667 700*1334 @2x 4.7
iphone 6+ 408*736 1243*2208 @3xs 5.5