iPhone6的物理尺寸比5s放大了17.5%,同样物理分辨率也增加了17.5%,从1136* 640提升到1334* 750,这样同比的增长结果就是像素密度ppi与5s保持不变,依然是326ppi(4s也是这个值),也就是说6跟5s相比,屏幕的清晰度不变,只是尺寸变大了。如果针对5s用像素定位布局做出来的app界面,尤其是依赖568和320这两个数字的界面,很可能出现右边和下边出现空白,因为逻辑分辨率变成了667* 375。
旧的应用不做适配的话,兼容的解决方案是等比放大模式,也就是将原来以568* 320为参考系的界面,所有的逻辑点位置* 1.175对应到667* 375之下。而想使用非兼容模式需要通过设置667* 375对应的开屏图或者launch.storyboard来显示告诉操作系统使用非等比放大模式。
而到了iPhone6p就又有一点不一样了,因为6p的分辨率1920* 1080,与5s和6相比,其分辨率的增长比率超过了屏幕物理尺寸的增长比例,导致像素密度ppi有显著增长,从326增加到401,也就是说不但屏幕尺寸变大了,清晰度也提高了,而且清晰度的提高大于屏幕尺寸的提高率。
从程序开发的角度来看,6和6p如果不做适配,程序肯定会不适应,其实每一代iPhone革新都需要做app适配嘛。但这一代的工作量最大。因为适配通常有两方面工作:一是页面布局的调整,二是图标尺寸的调整。
3->4的时候屏幕尺寸没变,只有清晰度变了,所以页面布局不用调整(布局是基于点——逻辑分辨率的,不是基于像素——物理分辨率的),只需要把素材图标的像素*2变成@2x,这样看起来整个页面布局还跟以前一样,只是图片和图标变得更清晰了。
4->5的时候屏幕尺寸变了(宽度没变,只有高度增加了),增加了竖向的空间,但是清晰度没变,所以页面布局需要调整(不调整的话老的应用是居中显示,屏幕上下会留黑,这就是5对4的兼容模式),但调整起来应该也很容易,只需要让竖向显示更多的内容或者把原来的内容在竖向拉开间距即可。素材图标还是@2x不用调整,同样的图标在手机上显示出来,依然是跟3和4的时候一样大。
5->6的时候屏幕尺寸变了(横向和竖向都增加了),但是清晰度没变,所以跟上一条一样只需要调整布局,唯一不同的是4->5只需要调整竖向布局,5->6横向竖向都有增加的空间都需要调整。所以在这次的兼容模式也跟4->5有区别了,因为兼容模式的原则是保持等比,4->5的时候只有一个维度增加了,所以竖向居中就可以了,但5->6的时候两个方向都增加了,而且是等比增加的,那么兼容模式就不是4周都留黑边了,而是采用了放大的方式,又因为5->6屏幕分辨率是等比放大,故兼容模式把界面等比放大以后,依然是充满屏幕,只是图标的物理面积增加大,清晰度也变低了一点而已。
5->6p的时候屏幕尺寸和清晰度都变了。所有不但要调整布局,还要重新做素材图标的清晰度,改成@3x的分辨率。如果不调整的话,那不但右边和下边会留空或者留黑,而且原来的布局的图标物理尺寸也比以前的小了(图标分辨率尺寸没变,但是6p的ppi增大了,导致物理尺寸变小)。
而6和6p是一起出的,而且屏幕尺寸还不一样,所以开发要同时兼顾这两种调整,工作量比以前都要大。然后好消息是Xcode为了今后考虑推出了Autolayout自动布局,通过设置不同页面空间之前的约束关系来简化实现,不必对所有的页面都进行适配硬编码,这次对布局的调整完成以后,今后屏幕尺寸再变化需要做的工作量就少多了,甚至没有。(其实针对每种屏幕尺寸继续做硬编码也没关系,iPhone的机型毕竟还是有限的,要是换到Android不用自动布局都不行。)
另外不做适配的情况下,旧的应用会显示的像老人机那样放大,这是苹果硬件设计上为了旧应用的兼容策略,并且6和6p也并不是第一次采用放大策略,实际上从iPhone4的163ppi提升到iPhone4S的326 retina ppi,其放大策略更是直接放大了2倍,只不过是由于屏幕尺寸没变,所以前后对比没有变化而已。另外,不管是6的1334* 750,还是6p的1920* 1080,其高宽比都是1.78,跟iPhone5s的1136* 640下的高宽比是一致的,也就是说以前程序的布局,在不做适配的情况下,只要等比拉伸显示即可填充满6和6p的全屏幕,但结果也就是每个显示单元不但变大,而且变模糊了,尤其是在6p下更明显,因为拉伸的幅度大得多。
说了这么多基本还是理论方面,至于程序上要怎么做,一图胜千言,看懂下面这个图基本上对iPhone适配布局就能完全游刃有余了。The Ultimate Guide To iPhone Resolutions
----------------------------更新--------------------------
iPhone X要出了,又多了一个适配项目。根据官方适配指南,iPhone的逻辑像素是375* 812,采用3x转换关系。那么物理像素应该为1125* 2436,根据这个长宽物理像素计算出对角线物理像素为2683,而iPhone又声称其屏幕物理尺寸为5.8英寸,则其像素密度为2683/5.8=462,比之前6p的401又增加了不少,难怪这次的屏幕叫做super retina超视网膜屏幕。
但按照方便乔帮主对iPhone4s retina的解释,ppi超过326就已经无法被视网膜分辨了、那么再进一步提高ppi的意义何在?或者说,ppi并没有提高,而是像6p一样在显示1126* 2436这个尺寸图像之前又经过down sample处理了?查了一下资料,iPhone X公布出来的ppi是458,那么反算一下2683/458=5.85,也就是说iPhone X的实际屏幕尺寸是5.85英寸。
而关于retina和ppi超过300肉眼无法分辨这个结论,基本可以断定为乔帮主为了给iPhone4S和iPad3的宣传炒作造势而故意营造出来的说法,根据其他一些权威专家的说法,人类肉眼能够分辨的ppi极限应该在500左右,也就是说现在的手机基本快接近极限了。
最后,屏幕上端的刘海也不是随便来的,三个圆相切也很有美感的嘛。。。