iPhoneX 序列適配方案(小結(jié))
和往常一樣,蘋(píng)果發(fā)布新產(chǎn)品,我們作為開(kāi)發(fā)者都需要對(duì)系統(tǒng)和UI布局進(jìn)行適配,今年也是一樣。從去年發(fā)布的 iphoneX開(kāi)始,iPhone 手機(jī)加入了劉海設(shè)計(jì),而且針對(duì)于iphone的劉海,需要特殊的適配。今年新出的3款iphone都帶有劉海,自然也不例外。
在iphonex以前iphone的頂部導(dǎo)航欄高度都是統(tǒng)一的64,底部導(dǎo)航欄是統(tǒng)一的49;從iphonex的劉海屏開(kāi)始,出了一個(gè)SafeArea的概念,帶劉海設(shè)計(jì)的iphone,頂部導(dǎo)航的高度由原來(lái)的64,變成了88,因?yàn)闋顟B(tài)欄的高度由原來(lái)的20變成了44;底部導(dǎo)航欄的高度由原來(lái)的49,變成了83。
所以對(duì)于iphonex序列的手機(jī)的適配,都需要針對(duì)頂部導(dǎo)航&底部導(dǎo)航進(jìn)行適配。只不過(guò)原來(lái)判斷iphonex的方法,已經(jīng)不能完全判斷新的iphonex新機(jī)型。要么繼續(xù)加if{}else{}進(jìn)行判斷,要么就是尋找新的方法,還好iphonex序列的機(jī)型的寬高比是有規(guī)律的。
從網(wǎng)上看到了別人的帖子列出了iphonex序列機(jī)型的寬高&比例:
//iphoneX 序列機(jī)型的屏幕高寬 //XSM SCREEN_HEIGHTL = 896.000000,SCREEN_WIDTHL = 414.000000 2.1642512077 //XS SCREEN_HEIGHTL = 812.000000,SCREEN_WIDTHL = 375.000000 2.1653333333 //XR SCREEN_HEIGHTL = 896.000000,SCREEN_WIDTHL = 414.000000 2.1642512077 //X SCREEN_HEIGHTL = 812.000000,SCREEN_WIDTHL = 375.000000 2.1653333333
iphonex序列iOS原生的適配
#define SCREEN_HEIGHTL [UIScreen mainScreen].bounds.size.height #define SCREEN_WIDTHL [UIScreen mainScreen].bounds.size.width #define KIsiPhoneX ((int)((SCREEN_HEIGHTL/SCREEN_WIDTHL)*100) == 216)?YES:NO //判斷是否為 iPhoneXS Max,iPhoneXS,iPhoneXR,iPhoneX
react-native針對(duì)于iphonex序列機(jī)型的適配
const {width, height} = Dimensions.get('window');
//iphoneX 序列機(jī)型的屏幕高寬
//XSM SCREEN_HEIGHTL = 896.000000,SCREEN_WIDTHL = 414.000000 2.1642512077
//XS SCREEN_HEIGHTL = 812.000000,SCREEN_WIDTHL = 375.000000 2.1653333333
//XR SCREEN_HEIGHTL = 896.000000,SCREEN_WIDTHL = 414.000000 2.1642512077
//X SCREEN_HEIGHTL = 812.000000,SCREEN_WIDTHL = 375.000000 2.1653333333
//目前iPhone X序列手機(jī)的適配算法:高寬比先轉(zhuǎn)換為字符串,截取前三位,轉(zhuǎn)換為number類(lèi)型 再乘以100
export const isIphoneX = (Platform.OS === 'ios' && (Number(((height/width)+"").substr(0,4)) * 100) === 216);
總結(jié)
無(wú)論是iOS原生還是react-native,只要判斷出是iphonex序列機(jī)型,針對(duì)頂部導(dǎo)航欄和底部導(dǎo)航欄做特殊的處理即可。保證頂部導(dǎo)航和底部導(dǎo)航的UI正確顯示,能夠正確響應(yīng)事件。(如果適配不好,會(huì)出現(xiàn)UI顯示不正確和事件不能夠響應(yīng)的情況。)
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
iOS Remote Notification遠(yuǎn)程消息推送處理
這篇文章主要為大家詳細(xì)介紹了iOS Remote Notification遠(yuǎn)程消息推送處理,感興趣的小伙伴們可以參考一下2016-09-09
iOS?WKWebView秒開(kāi)方案實(shí)戰(zhàn)記錄
從iOS8開(kāi)始,就引入了新的瀏覽器控件WKWebView,用于取代UIWebView,下面這篇文章主要給大家介紹了關(guān)于iOS?WKWebView秒開(kāi)方案的相關(guān)資料,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2021-12-12
分析IOS RunLoop的事件循環(huán)機(jī)制
RunLoop是與線(xiàn)程相關(guān)的基礎(chǔ)架構(gòu)中的一部分,它是一個(gè)處理事件的循環(huán)(線(xiàn)程進(jìn)入這個(gè)循環(huán),運(yùn)行事件處理程序來(lái)響應(yīng)傳入的事件),RunLoop的目的是當(dāng)有事件需要處理時(shí),線(xiàn)程是活躍的、忙碌的,當(dāng)沒(méi)有事件后,線(xiàn)程進(jìn)入休眠。2021-06-06
淺析Objective-C中分類(lèi)Category的使用
這篇文章主要介紹了淺析Objective-C中分類(lèi)Category的使用,使用Category對(duì)類(lèi)進(jìn)行擴(kuò)展可以訪(fǎng)問(wèn)原始類(lèi)的實(shí)例變量,需要的朋友可以參考下2016-03-03
iOS開(kāi)發(fā)教程之單例使用問(wèn)題詳析
這篇文章主要給大家介紹了關(guān)于iOS開(kāi)發(fā)教程之單例使用問(wèn)題的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)各位iOS開(kāi)發(fā)者們具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-04-04
iOS實(shí)現(xiàn)無(wú)感知上拉加載更多功能的思路與方法
下拉刷新和上拉加載更多功能是一個(gè)應(yīng)用非常廣泛的一個(gè)效果,最新項(xiàng)目中就遇到這個(gè)功能,這篇文章主要給大家介紹了關(guān)于iOS實(shí)現(xiàn)無(wú)感知上拉加載更多功能的思路與方法,需要的朋友可以參考下2021-07-07
ios 流媒體播放器實(shí)現(xiàn)流程及FreeStreamer的使用的示例
本篇文章主要介紹了ios 流媒體播放器實(shí)現(xiàn)流程及FreeStreamer的使用的示例代碼,非常具有實(shí)用價(jià)值,需要的朋友可以參考下2018-01-01

