適配iPhone X,iPhone XS,iPhone XS Max

先來看一下三款新的iPhoneXS的相關尺寸吧, 如下 :


尺寸.png

需要注意的是:

iPhoneXS和iPhoneX的相關尺寸相同,所以,iPhone XS和iPhoneX一樣,無需做其他適配;

iPhoneX、iPhone XS、iPhone XS Max均為3倍屏,但是iPhoneXR為2倍屏

如果你使用的是LaunchImag,就需要提供正確的啟動圖。需要注意的是XR使用的@2x的圖

如果我們只設置iPhone X的啟動圖,沒有設置iPhone XR/iPhone XS Max啟動圖。iPhone XR/iPhone XS Max會默認使用iPhone X的啟動圖

iPhoneXS Max以及iPhoneXR的邏輯像素是一致的,均為414*896pt,區(qū)別在于一個是@3x,一個是@2x

針對這種樣式的屏幕,我們處理方法是一樣,幾個宏直接搞定

怎么判斷是不是iPhone X? 獲取當前屏幕寬度或高度與尺寸進行比較就可以了


比較.png

由上圖不難看出, 我們在設計的時候以iPhone8(375*667pt)為基準做設計稿,先得到iPhoneXR:由于都是@2x,首先需要將畫板寬度拉寬為414pt,高度拉高為896pt(與我們做iPhone5到iPhone6的寬高變化處理是一樣的道理),狀態(tài)欄由20pt變高為44pt,在底部加上主頁指示器(Home Indicator)高度為34pt,導航欄以及標簽欄高度不變。我們發(fā)現(xiàn)iPhoneXR內容呈現(xiàn)的比iPhone8要多一些。有了iPhoneXR后,直接等比例放大1.5倍就可以得到iPhoneXS Max

即:導航欄依舊是64->88, 底部的UITabBar由49->83

附上幾個宏, 直接解決:

'#define iPhoneX ([UIScreen instancesRespondToSelector:@selector(currentMode)] ? CGSizeEqualToSize(CGSizeMake(1125, 2436), [[UIScreen mainScreen] currentMode].size) : NO) '

'#define iPhoneXR ([UIScreen instancesRespondToSelector:@selector(currentMode)] ? CGSizeEqualToSize(CGSizeMake(828, 1792), [[UIScreen mainScreen] currentMode].size) : NO) '

'#define iPhoneXS_Max ([UIScreen instancesRespondToSelector:@selector(currentMode)] ? CGSizeEqualToSize(CGSizeMake(1242, 2688), [[UIScreen mainScreen] currentMode].size) : NO)'

/**

  • 屏幕適配--iPhoneX全系
    */
    '#define kiPhoneXAll ([UIScreen mainScreen].bounds.size.height == 812 || [UIScreen mainScreen].bounds.size.height == 896)'

/**

  • iPhoneX全系導航欄增加高度 (64->88)
    */
    '#define kiPhoneX_Top_Height (([UIScreen mainScreen].bounds.size.height == 812 || [UIScreen mainScreen].bounds.size.height == 896)?24:0)'

/**

  • iPhoneX全系TabBar增加高度 (49->83)
    */
    '#define kiPhoneX_Bottom_Height (([UIScreen mainScreen].bounds.size.height == 812 || [UIScreen mainScreen].bounds.size.height == 896)?34:0)'

注意的是:針對繼承自UIScrollView的,需要處理一下內邊距

//第一步:關閉自動調整內邊距
if (@available(iOS 11.0, *)) {
[UIScrollView appearance].contentInsetAdjustmentBehavior = UIScrollViewContentInsetAdjustmentNever;
}

//第二步:在使用的地方手動設置內邊距
self.scrollView.contentInset = UIEdgeInsetsMake(0, 0, kBottomBarHeight, 0);
//這樣設置以后,底下的觸摸區(qū)域就能正常顯示內容了,而且當UIScrollView滑到最底部的時候,不會被遮住。

?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容