Cordova iPhone 劉海屏 和 安卓瀑布屏 等異形屏幕的適配處理


1.  在cordova項目的config.xml中指定StatusBarOverlaysWebView(需要cordova-plugin-statusbar插件支持),表示應用界面是否覆蓋狀態欄(系統最上方顯示時間、信號、電量的地方)。Android設為false,iOS設為true。設為true可以達到沉浸式的效果。

<platform name="android">
    <preference name="orientation" value="portrait" />
    <preference name="StatusBarOverlaysWebView" value="false" />
</platform>

<platform name="ios">
    <preference name="orientation" value="portrait" />
    <preference name="StatusBarOverlaysWebView" value="true" />
</platform>

 

2.  在html的頭部標簽里指定viewport的 viewport-fit=cover,讓頁面空間撐滿顯示屏。

<head>
...
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, minimum-scale=1, user-scalable=no, minimal-ui, viewport-fit=cover">
...
</head>

 

3. 設置頁面容器的padding為safe-area相關值。safe-area是iphone自帶的css環境變量,標記各邊的安全邊距,參考 MDN文檔

.container{
    padding: env(safe-area-inset-top, 50px)
             env(safe-area-inset-right, 0px)
             env(safe-area-inset-bottom, 0px)
             env(safe-area-inset-left, 50px);
}

這是比較粗暴的做法。實際的app內頭部通常有個navbar,底部有個toolbar。可以這樣設置他們的高度:

.navbar{
    height:calc(env(safe-area-inset-top) + 44px);
    padding-top: env(safe-area-inset-top);
}

.toolbar{
    height:calc(env(safe-area-inset-bottom) + 44px);
    padding-bottom: env(safe-area-inset-bottom);
}

 

4. 對於Android,如果設置 StatusBarOverlaysWebView 為true,建議使用css自定義變量來控制頭部的內邊距。

:root{
    --safe-area-top: 44px;
    --safe-area-bottom: 0px;
    --safe-area-right: 0px;
    --safe-area-left: 0px;
}

body{
    padding-left: var(--safe-area-left);
    padding-right: var(--safe-area-right);
}

.navbar{
    height:calc(var(--safe-area-top) + 44px);
    padding-top: var(--safe-area-top);
}

進一步的思路:根據機型指定特定的邊距;對於曲面屏、瀑布屏,還可以設置兩側的safe-area來優化顯示效果。

document.addEventListener("deviceready", onDeviceReady, false);
function onDeviceReady() {
    if(device.model && device.model=="LIO-AL00"){
        //如果是華為Mate30pro,則插入自定義safe-area,左右兩側空出一定距離
        var style = document.createElement('style'); 
        style.type = 'text/css'; 
        style.innerHTML=":root{ --safe-area-left:24px;--safe-area-right:24px }"; 
        document.getElementsByTagName('head').item(0).appendChild(style); 
    }
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM