简单方法适配IphoneXS Iphone XR IphoneXS MAX
這次蘋果一口氣出了三款新設(shè)備,又要迎來了一波適配,首先來看下設(shè)備的相關(guān)參數(shù):
| 型號 | 屏幕尺寸(inch)屏幕對角線(屏幕以外的邊寬度不算)1 inch = 2.54cm = 25.4mm | ? | 邏輯分辨率(point)(pt)ios開發(fā)單位,即point,絕對長度,1pt=1/72英寸。 | 邏輯分辨率? 寬高比 | 親測用模擬器測的UIScreen的scale與nativeScale與縮放因子相等 | 縮放因子(scale factor) | point = x*x pixel | dpr(設(shè)備像素比,1px = (dpr)^2 * 1dp;設(shè)備像素比與ppi相關(guān),一般是ppi/160的整數(shù)倍) | ? | 物理分辨率(像素)(pixel)(px) | 渲染分辨率 | 像素密度沿著對角線,每英寸所擁有的像素數(shù)目(PPI) |
| iPhone3GS | 3.5 | ? | 320 * 480 | 1.50 | ? | @1x | 1point = 1pixel | 1.0 | ? | 320 * 480 | ? | 163 |
| iPhone4/4s | 3.5 | ? | 320 * 480 | 1.50 | ? | @2x | 1point = 2*2pixel | 2.0 | 2倍屏/Retina屏 | 640 * 960 | ? | 326 |
| iPhone5/5s | 4 | ? | 320 * 568 | 1.78 | ? | @2x | 1point = 2*2pixel | 2.0 | ? | 640 * 1136 | ? | 326 |
| iPhone6/6s | 4.7 | ? | 375 * 667 | 1.78 | ? | @2x | 1point = 2*2pixel | 2.0 | ? | 750 * 1334 | ? | 326 |
| iPhone6Plus/6s Plus | 5.5 | ? | 414 * 736 | 1.78 | ? | @3x | 1point = 3*3pixel | 2.5 | 3倍屏/RetinaHD屏 | 1242 * 2208 | ? | 401 |
| Iphone X | 5.8 | 四者是圓角所以對角線比左側(cè)值稍小些 | 375 * 812 | 2.17 | @3x | 6.50 | 1point = 6.5*6.5pixel | 2.9 | ? | 2436 * 1125 | ? | 458 |
| iphone XS | 5.8 | ? | 375 * 812 | 2.17 | @3x | 6.50 | 1point = 6.5*6.5pixel | 2.9 | ? | 2436 * 1125 | ? | 458 |
| iphone XR | 6.1 | ? | 414 * 896 | 2.16 | @2x | 4.33 | 1point = 4.33*4.33pixel | 2.0 | ? | 1792 * 828 | ? | 326 |
| iphone XS MAX | 6.5 | ? | 414 * 896 | 2.16 | @3x | 6.49 | 1point = 6.49*6.49pixel | 2.9 | ? | 2688 * 1242 | ? | 458 |
| ? | ? | ? | ? | ? | ? | ? | ? | ? | ? | ? | ? | 決定屏幕清晰度的值-像素密度 |
| ? | ? | ? | ? | ? | ? | ? | ? | ? | ? | ? | ? | ? |
先分析下數(shù)據(jù):如果做適配,我們主要關(guān)注IphoneX以后出的設(shè)備的邏輯分辨率可以看出,X與XS的邏輯分辨率一致,而XR與MAX是邏輯分辨率一致;我們再來看,X與XS的高寬比812 / 375 = 2.17,以及XR及MAX的高寬比896 / 414 = 2.18。而我們的工程之前肯定都適配過X了,所以,適配XR與MAX就so easy了,而且這四種設(shè)備都是只支持面容ID而不支持TOUchID的,只要把IphoneX的宏定義對IphoneX的判斷或上XR與MAX就行了。以前我們工程里的宏定義如下:
#define IS_IPHONEX ([UIScreen instancesRespondToSelector:@selector(currentMode)] ? CGSizeEqualToSize(CGSizeMake(1125, 2436), [[UIScreen mainScreen] currentMode].size) : NO)
只要改成:
#define IS_IPHONEX? ? ([UIScreen instancesRespondToSelector:@selector(currentMode)] ? ((CGSizeEqualToSize(CGSizeMake(1125, 2436), [[UIScreen mainScreen] currentMode].size))||(SCREEN_WIDTH == 414 && SCREEN_HEIGHT == 896)) : NO)
即可。
如果你的項目剛創(chuàng)建不就很easy的情況,強烈建議對整個工程的baseVC做處理,即:在baseVC的View上添加一個UIScrollView,在此SCRollVIew上再添加一個view做所有子控制器的父view,這樣,即使以后出現(xiàn)其他寬高比的設(shè)備,就不用單獨做適配了。
還是如果你的項目剛創(chuàng)建不就很easy的情況,建議對cgrectMake結(jié)構(gòu)體做文章,讓你的控件的寬和高按你基準設(shè)計圖和屏幕的寬高比去變化,這也算是一勞永逸的操作。
總結(jié)
以上是生活随笔為你收集整理的简单方法适配IphoneXS Iphone XR IphoneXS MAX的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 64位 Fedora 11 硬盘安装 配
- 下一篇: 【站内题解】十六道csdn每日一练Pyt