首页 > 代码库 > iOS8 屏幕适配问题。

iOS8 屏幕适配问题。

最近在做关于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

     

iOS8 屏幕适配问题。