微信小程序適配 iPhone X 總結(jié)

iPhone X 屏幕數(shù)據(jù)

我們這里先簡單總結(jié)一下 iPhone X 屏幕的基礎(chǔ)數(shù)據(jù)巨坊,方便后續(xù)在小程序開發(fā)中進(jìn)行適配。

屏幕尺寸:5.8 英寸(對角線)

屏幕物理分辨率:1125px × 2436px,458 ppi

實(shí)際開發(fā)適配尺寸:375pt × 812pt,@3x

此外蒜茴,由于在 iPhone X 屏幕頂部狀態(tài)欄區(qū)域有“齊劉海”浆西,以及在屏幕底部增加了“操作條”粉私,如下圖所示,因此近零,我們在開發(fā)中需要注意安全區(qū)域的問題诺核。

根據(jù)蘋果官方的文檔,iPhone X 頂部狀態(tài)欄的適配安全區(qū)域的高度為 44pt久信,底部操作條區(qū)域的高度為 34pt猪瞬。另外,在 iPhone X 中入篮,一些系統(tǒng) Bar 的默認(rèn)高度相比于之前的設(shè)備也發(fā)生了變化,如下表所示幌甘。

所以在 iOS App 開發(fā)中潮售,如果我們使用系統(tǒng)默認(rèn)的?UINavigationController?和?UITabBarController?時(shí)痊项,則無需額外的適配工作,iOS 系統(tǒng)會(huì)自動(dòng)適配好相關(guān) Bar 的安全區(qū)域問題酥诽。如果我們使用了自定義的導(dǎo)航欄和標(biāo)簽欄鞍泉,則需要注意根據(jù)設(shè)備類型區(qū)分設(shè)置這些 Bar 的不同高度。

小程序的尺寸單位

為了解決不同屏幕尺寸的適配問題肮帐,小程序自己定了一個(gè)尺寸單位:rpx(responsive pixel)咖驮,它可以根據(jù)屏幕寬度進(jìn)行自適應(yīng)。小程序中規(guī)定训枢,所有設(shè)備的屏幕寬度都為 750rpx托修,根據(jù)設(shè)備屏幕實(shí)際寬度的不同,1rpx 所代表的實(shí)際像素值也不一樣恒界。

根據(jù)微信開發(fā)文檔睦刃,在 4.7 英寸的 iPhone 設(shè)備上(iPhone 6/7/8),屏幕寬度為 375px(此處應(yīng)該理解為 375 point)十酣,共有 750 個(gè)物理像素涩拙,則 750rpx = 375px = 750 物理像素,1rpx = 0.5px = 1物理像素耸采。

小程序中如何判斷設(shè)備為 iPhone X

上面我們簡要介紹了 iPhone X 的屏幕數(shù)據(jù)和小程序中的尺寸單位作為鋪墊兴泥,現(xiàn)在終于要切入正題了,要在小程序中適配 iPhone X 屏幕虾宇,首先我們需要知道如何判斷設(shè)備類型搓彻。

微信的小程序 API 中提供了一個(gè)?wx.getSystemInfo(OBJECT)?方法用于獲取用戶手機(jī)的系統(tǒng)信息和設(shè)備信息,包含如下數(shù)據(jù):

上述每個(gè)字段的含義詳見文檔文留,我們不再一一贅述好唯。

因此,我們可以根據(jù)該方法返回的手機(jī)型號(hào)字段?model?是否包含?iPhone X?字符串來判斷設(shè)備是否為 iPhone X燥翅,也可以根據(jù)?screenHeight?的高度是否等于?812?來判斷骑篙。

NOTE:?這里有一個(gè)小坑需要注意,在微信開發(fā)者工具中的模擬器森书,如果選擇為 iPhone X靶端,此時(shí)獲取到的?model?值為?iPhone X,導(dǎo)致我以為真機(jī)也是這個(gè)值凛膏,于是直接用?if (model == 'iPhone X')?來判斷杨名,但其實(shí)真機(jī)下?model?的值為這種格式:?iPhone X (GSM+CDMA)<iPhone10,3>,因此我們需要用字符串檢索匹配進(jìn)行判斷猖毫。

綜上台谍,我們可以在 app.js 的?globalData?中添加一個(gè)字段?isIPX?用于標(biāo)識(shí)當(dāng)前設(shè)備是否為 iPhone X,然后在小程序啟動(dòng)時(shí)?onLaunch?中調(diào)用?wx.getSystemInfo(OBJECT)?方法并在其?success?回調(diào)中讀取?model?字段進(jìn)行分析吁断,代碼大致如下:

App({

// 全局?jǐn)?shù)據(jù)

? globalData: {

// 其他數(shù)據(jù)定義 ...


isIPX:false,// 當(dāng)前設(shè)備是否為 iPhone X

? },


// 小程序啟動(dòng)入口

onLaunch:function(options){

// 其他啟動(dòng)代碼...


// 判斷設(shè)備是否為 iPhone X

this.checkIsIPhoneX()

? },


checkIsIPhoneX:function(){

constself =this

? ? wx.getSystemInfo({

success:function(res){

// 根據(jù) model 進(jìn)行判斷

if(res.model.search('iPhone X') !=-1) {

self.globalData.isIPX =true

? ? ? ? }

// 或者根據(jù) screenHeight 進(jìn)行判斷

// if (res.screenHeight == 812) {

//? self.globalData.isIPX = true

// }

? ? ? }

? ? })

? },

}

如果需要小程序啟動(dòng)時(shí)立即獲取設(shè)備相關(guān)信息趁蕊,也可以調(diào)?wx.getSystemInfoSync()?方法坞生,它會(huì)同步獲取數(shù)據(jù)并立即返回。

頁面適配實(shí)戰(zhàn)

在小程序頁面開發(fā)中掷伙,涉及到需要適配 iPhone X 的地方主要有:導(dǎo)航欄(NavigationBar)是己,標(biāo)簽欄(TabBar)以及頁面底部的吸底按鈕。

導(dǎo)航欄和標(biāo)簽欄適配

如果我們使用微信小程序官方組件進(jìn)行開發(fā)任柜,沒有進(jìn)行自定義卒废,在?app.json?文件中設(shè)置?tabBar?頁面,且?window?的?navigationStyle?值為?default宙地,那么我們無需在 iPhone X 中對導(dǎo)航欄和標(biāo)簽欄進(jìn)行適配摔认,微信會(huì)自動(dòng)幫我們適配好,如下圖為知識(shí)小集小程序的首頁:

但是我們?nèi)绻亲远x導(dǎo)航欄(在?app.json?文件中設(shè)置?window?的?navigationStyle?為?custom绸栅,此時(shí)只保留右上角膠囊狀的按鈕级野,需要開發(fā)者自己畫導(dǎo)航欄樣式)和標(biāo)簽欄,則我們需要在每個(gè)頁面中判斷設(shè)備類型粹胯,并針對 iPhone X 屏幕在安全區(qū)域內(nèi)進(jìn)行布局蓖柔,并修改相關(guān) Bar 的高度值(見上述表格)。

以自定義導(dǎo)航欄適配為例风纠,步驟如下:

(1)在每個(gè)頁面的?page.js?中先讀取?app.js?中的?isIPX?值况鸣,如下:

constapp = getApp()

Page({

? data: {

// 頁面其他數(shù)據(jù)...


? ? isIPX: app.globalData.isIPX,

? },


// 其他代碼

}

(2)然后在?page.wxss?樣式文件中對某一個(gè)視圖?View?分別為普通屏幕和 iPhone X 屏幕寫兩種樣式,如下:

.navi-bar-view{

height:64px;

/* 其他樣式值 */

}

.navi-bar-view-IPX{

height:88px;

/* 其他樣式值 */

}

(3)最后在?page.wxml?頁面結(jié)構(gòu)布局中根據(jù)?isIPX?的值給?View?設(shè)置不同的?class?樣式竹观,如下:

此外镐捧,對于自定義導(dǎo)航欄和標(biāo)簽欄,我建議還是要遵循 iPhone UI 的設(shè)計(jì)規(guī)范臭增,樣式可以參考蘋果官方的渲染圖:

吸底按鈕適配

在小程序頁面中懂酱,吸底按鈕是很常見的一種設(shè)計(jì),我們一般會(huì)把一些重要的按鈕放在頁面底部懸浮不動(dòng)誊抛,例如我們知識(shí)小集小程序的“小集詳情頁”底部的“收藏”和“轉(zhuǎn)發(fā)”按鈕:

在 iPhone X 中我們需要把吸底按鈕往上偏移 34 像素列牺,可通過在 CSS 樣式中設(shè)置?padding-bottom?為?34px?實(shí)現(xiàn),參考代碼如下:

.feed-bottom-view{

width:100%;

height:48px;/* 吸底按鈕的高度 */

bottom:0;

opacity:0.95;

position: fixed;

border-top-style: solid;

border-top-width:0.5px;/* 分割線的高度 */

border-color: lightgrey;

background-color:#F8F8F8;

}

.feed-bottom-view-IPX{

/* iPhone X 內(nèi)容往上偏移 34px */

padding-bottom:34px;

}

<!-- 底部吸底按區(qū)域 -->

備注:如前面所述拗窃,對于不同設(shè)備寬度瞎领,1rpx 所代表的實(shí)際像素值也不一樣,而在不同尺寸的 iPhone 設(shè)備(3.5/4.0/4.7/5.5 英寸)中随夸,雖然它們的寬度不同九默,但其導(dǎo)航欄+狀態(tài)欄的高度都為 64pt(iPhone X 為 88pt),標(biāo)簽欄 TabBar 的高度都為 49pt(iPhone X 為 83pt)宾毒。所以在小程序開發(fā)中驼修,當(dāng)我們需要自定義導(dǎo)航欄、標(biāo)簽欄,或者適配 iPhone X 頂部和底部安全區(qū)域時(shí)邪锌,我建議此處的單位直接使用?px(在小程序中對應(yīng) iOS 開發(fā)中的點(diǎn)?pt)而不使用?rpx(當(dāng)然頁面的其他元素的尺寸描述還是推薦使用?rpx)勉躺,以確保最終渲染顯示的高度與 iOS 系統(tǒng)默認(rèn)的一致。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末觅丰,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子妨退,更是在濱河造成了極大的恐慌妇萄,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,427評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件咬荷,死亡現(xiàn)場離奇詭異冠句,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)幸乒,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,551評論 3 395
  • 文/潘曉璐 我一進(jìn)店門懦底,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人罕扎,你說我怎么就攤上這事聚唐。” “怎么了腔召?”我有些...
    開封第一講書人閱讀 165,747評論 0 356
  • 文/不壞的土叔 我叫張陵杆查,是天一觀的道長。 經(jīng)常有香客問我臀蛛,道長亲桦,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,939評論 1 295
  • 正文 為了忘掉前任浊仆,我火速辦了婚禮客峭,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘抡柿。我一直安慰自己舔琅,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,955評論 6 392
  • 文/花漫 我一把揭開白布沙绝。 她就那樣靜靜地躺著搏明,像睡著了一般。 火紅的嫁衣襯著肌膚如雪闪檬。 梳的紋絲不亂的頭發(fā)上星著,一...
    開封第一講書人閱讀 51,737評論 1 305
  • 那天,我揣著相機(jī)與錄音虚循,去河邊找鬼横缔。 笑死,一個(gè)胖子當(dāng)著我的面吹牛粮坞,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 40,448評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起觉增,我...
    開封第一講書人閱讀 39,352評論 0 276
  • 序言:老撾萬榮一對情侶失蹤嘹履,失蹤者是張志新(化名)和其女友劉穎窒篱,沒想到半個(gè)月后配并,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體畸冲,經(jīng)...
    沈念sama閱讀 45,834評論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡纱意,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,992評論 3 338
  • 正文 我和宋清朗相戀三年迄委,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片类少。...
    茶點(diǎn)故事閱讀 40,133評論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡叙身,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出硫狞,到底是詐尸還是另有隱情信轿,我是刑警寧澤,帶...
    沈念sama閱讀 35,815評論 5 346
  • 正文 年R本政府宣布残吩,位于F島的核電站财忽,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏泣侮。R本人自食惡果不足惜即彪,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,477評論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望活尊。 院中可真熱鬧隶校,春花似錦、人聲如沸蛹锰。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,022評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽宁仔。三九已至稠屠,卻和暖如春峦睡,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背权埠。 一陣腳步聲響...
    開封第一講書人閱讀 33,147評論 1 272
  • 我被黑心中介騙來泰國打工榨了, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人攘蔽。 一個(gè)月前我還...
    沈念sama閱讀 48,398評論 3 373
  • 正文 我出身青樓龙屉,卻偏偏與公主長得像,于是被迫代替她去往敵國和親满俗。 傳聞我的和親對象是個(gè)殘疾皇子转捕,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,077評論 2 355

推薦閱讀更多精彩內(nèi)容