旗下產(chǎn)業(yè): A產(chǎn)業(yè)/?A實(shí)習(xí)/?A計(jì)劃
全國統(tǒng)一咨詢熱線:010-5367 2995
首頁 > 今日必讀 > 騰訊設(shè)計(jì)師教你如何極速適配 iPhone X

騰訊設(shè)計(jì)師教你如何極速適配 iPhone X

時(shí)間:2018-01-25來源:m.lb577.com點(diǎn)擊量:作者:fubowen
時(shí)間:2018-01-25點(diǎn)擊量:作者:fubowen

有什么方法可以極速適配iPhone X ?今天這篇好文騰訊設(shè)計(jì)師以QQ空間H5的項(xiàng)目為例,給大家分享最快的適配方法!

 

一. iPhone X適配方案

2017年9月蘋果發(fā)布了iPhone X機(jī)型,對(duì)于它的「劉海兒」和底部Home Indicator,QQ空間H5也在第一時(shí)間做了兼容適配。在適配過程中,我們也嘗試了這三種方案,如下。



1. 客戶端適配

解決方案

客戶端直接將webview的安全區(qū)域限制在除去安全區(qū)域的區(qū)域內(nèi)。頁面將展示在下圖灰色webview內(nèi):

利弊分析

  • 優(yōu)點(diǎn):H5前端開發(fā)沒有任何適配工作量。
  • 缺點(diǎn):頁面會(huì)限制在客戶端限制的webview區(qū)域內(nèi),沒有滿屏效果。


2. 使用media query

解決方案

針對(duì)iPhoneX機(jī)型在html結(jié)構(gòu)的meta標(biāo)簽加入:

<meta name=”viewport” content=”…,viewport-fit=cover” />

在css中加入:

@media only screen and (device-width: 375px) and (device-height: 812px) and (-webkit-device-pixel-ratio: 3) {
…{ padding-top: 44px; }
…{ padding-bottom: 34px; }
}

適配效果

利弊分析

  • 優(yōu)點(diǎn):對(duì)于iPhone X適配,最簡(jiǎn)單直接有效的方法,不會(huì)影響到其他iOS機(jī)型。
  • 缺點(diǎn):對(duì)于全屏/透頂標(biāo)題欄/橫屏情況都要用不同的css代碼進(jìn)行適配,不夠靈活。另外,如果蘋果下一年又發(fā)布了類似iPhone X plus這樣的機(jī)型,適配工作就要重新來過。

3. 使用蘋果提供的新屬性

解決方案

蘋果對(duì)于iPhone X上H5頁面的適配,提供了特殊屬性支持,包括meta標(biāo)簽的viewport屬性值中加入viewport-fit和加入constant(safe-area-inset-X)和env(safe-area-inset-X) ,這些屬性是與iOS11以上的所有iPhone機(jī)型(不僅僅包括iPhone X)都相關(guān)的,故以iOS版本為區(qū)別具體分析一下全屏下的H5頁面:

(1)針對(duì)iOS11.0以下系統(tǒng):

將不識(shí)別H5頁面meta標(biāo)簽下的viewport-fit及constant(safe-area-inset-X)/env(safe-area-inset-X)屬性。

(2)針對(duì)于iOS11.0-iOS11.1的系統(tǒng):

當(dāng)設(shè)置了viewport-fit=cover,H5頁面會(huì)覆蓋頁面安全區(qū)域全屏展示,但是這樣會(huì)帶來頁面元素會(huì)被「劉海兒」和底部Home Indicator遮擋問題,所以蘋果提供在css中設(shè)置constant(safe-area-inset-X)距離來規(guī)避遮擋問題。

這些在不同webview下會(huì)表現(xiàn)不同的值,我們留到后面分析。

另外,頁面不加viewport-fit=cover默認(rèn)viewport-fit=contain/auto,也就是我們看到的頁面不能覆蓋安全區(qū)域的情況,此時(shí)constant(safe-area-inset-X)的值都為0。

所以在meta標(biāo)簽的viewpoint中加viewport-fit=cover時(shí)iOS10和iOS11下constant(safe-area-inset-X)值的表現(xiàn)是不一樣的。

(3)針對(duì)iOS11.2及iOS11.2以上的系統(tǒng):

constant() function改成了env(),其他與iOS11.2以下表現(xiàn)一樣(詳見第2點(diǎn))。另外,iOS11.2新增了CSS function: min()和max()。例如:

padding-left: max(12px, env(safe-area-inset-left));

在env(safe-area-inset-left)值因?yàn)閣ebview變化時(shí)值也可以做出相應(yīng)變化,取12px和env(safe-area-inset-left)的較大值。

總結(jié)如下圖:

在了解了以上情況后,大致可以知道如果要適配一個(gè)普通H5頁面的頂部時(shí),可以在meta標(biāo)簽的viewport屬性中加入:

<meta name=”viewport” content=”…,viewport-fit=cover” />

然后在需要的class里面加入:

…{
padding-top: 20px; /* iOS 10 */
padding-top: constant(safe-area-inset-top); /* iOS 11.0-iOS 11.1 */
padding-top: env(safe-area-inset-top); /*iOS 11.2 */
}

在iOS11機(jī)型上,H5加入viewport-fit=cover后,safeArea的值是基于「如果布局接觸了非安全區(qū)域才會(huì)賦值」。所以在不同情況下會(huì)有不同表現(xiàn)。如下表所示:

適配結(jié)果

這里展示了iPhone8 / iPhone X (iOS11.2)透頂狀態(tài)欄/透頂標(biāo)題欄/普通標(biāo)題欄下打開適配H5的效果圖。

對(duì)應(yīng)代碼:

<!DOCTYPE html>
<html>
<head>
<meta charset=”utf-8″>
<title>test</title>
<meta name=”viewport” content=”width=device-width, initial-scale=1,minimum-scale=1, maximum-scale=1, user-scalable=no,viewport-fit=cover” />
<style type=”text/css”>
html {
background-color: #FFCD00;
}
html,body{
width: 100%;
height: 100%;
}
body, div{
margin: 0;
padding: 0;
}
.main{
font-size: 24px;
text-align: center;
width: 100%;
height: 100%;
padding-top: constant(safe-area-inset-top);
padding-top: env(safe-area-inset-top);
padding-bottom: constant(safe-area-inset-bottom);
padding-bottom: env(safe-area-inset-bottom);
box-sizing: border-box;
display: flex;
flex-direction: column;
justify-content: space-between;
}
</style>
</head>
<body>
<div class=”main”>
<div class=”top”>————頂部————</div>
<div class=”bottom”>————底部————</div>
</div>
</body>
</html>

利弊分析

  • 優(yōu)點(diǎn):符合標(biāo)準(zhǔn)的適配,靈活運(yùn)用的話,H5在不同webview下打開都可以有完美的展現(xiàn)。且考慮了未來機(jī)型的適配。
  • 缺點(diǎn):適配iPhone X時(shí)需要同時(shí)考慮其他iOS11機(jī)型下會(huì)不會(huì)受到影響。

以上只分析豎屏webview下的情況,橫屏webview可以自行通過模擬器進(jìn)行研究。接下來介紹一下模擬器的使用。


二. iPhone X模擬器 H5調(diào)試


介紹

加入適配代碼后,在沒iPhone X的情況下,可以通過iPhone X模擬器調(diào)試,像手機(jī)QQ/手機(jī)空間里的H5頁面,可以通過在模擬器上安裝手機(jī)QQ/手機(jī)空間app,然后調(diào)用Safari調(diào)試。
 

運(yùn)行模擬器

系統(tǒng)要求:

  • Mac OS 10.12.6以上
  • Xcode9.0以上

步驟:在Xcode打開一個(gè)空白項(xiàng)目,選擇iPhoneX模擬器,并點(diǎn)擊運(yùn)行按鈕即可。

安裝應(yīng)用

在Xcode上直接編譯客戶端代碼。或者讓客戶端開發(fā)編譯一份模擬器版本的.app文件,將其拖進(jìn)運(yùn)行的模擬器屏幕,應(yīng)用就成功安裝了。

H5 調(diào)試

安裝應(yīng)用后,在應(yīng)用里訪問H5頁面,然后打開Safari(需要開啟Safari的開發(fā)工具),在菜單中選擇開發(fā)-Simulator-頁面地址 ,就可以用Safari的檢查器對(duì)其作調(diào)試了。(當(dāng)有多個(gè)頁面地址,將鼠標(biāo)移至二級(jí)菜單的某一個(gè)頁面地址時(shí),模擬器頁面屏幕會(huì)有藍(lán)色遮罩出現(xiàn)時(shí)則是選中了本頁面地址),有些時(shí)候Safari識(shí)別不到模擬器,只需退出Safari,點(diǎn)一下模擬器屏幕,再重新打開Safari一般就會(huì)出來了。

這種方法對(duì)于我們要調(diào)試線上H5的其他問題、要測(cè)試其他iOS設(shè)備找不到真機(jī)時(shí)同樣適用。



最后

經(jīng)過分析,使用官方提供的新屬性是三種里面較佳的方案,不過使用在適配過程中應(yīng)當(dāng)整體考慮所有機(jī)型,webview的類型及布局、還有橫豎屏對(duì)contstant(safe-area-inset-X)/env(safe-area-inset-X)值的影響。





 

預(yù)約申請(qǐng)免費(fèi)試聽課

填寫下面表單即可預(yù)約申請(qǐng)免費(fèi)試聽!怕錢不夠?可先就業(yè)掙錢后再付學(xué)費(fèi)! 怕學(xué)不會(huì)?助教全程陪讀,隨時(shí)解惑!擔(dān)心就業(yè)?一地學(xué)習(xí),可推薦就業(yè)!

?2007-2021/北京漫動(dòng)者教育科技有限公司版權(quán)所有
備案號(hào):京ICP備12034770號(hào)

?2007-2022/ m.lb577.com 北京漫動(dòng)者數(shù)字科技有限公司 備案號(hào): 京ICP備12034770號(hào) 監(jiān)督電話:010-53672995 郵箱:bjaaa@aaaedu.cc

京公網(wǎng)安備 11010802035704號(hào)

網(wǎng)站地圖