uni-app iPhone X安全区域值不正确

发布于 1周前 作者 yuanlaile 来自 Uni-App

uni-app iPhone X安全区域值不正确

开发环境 版本号 项目创建方式
Windows win10 HBuilderX

操作步骤:

在页面中: uni.getSystemInfoSync()

"app-plus" : {  
    "safearea" : {  
        "bottom" : {  
            "offset" : "auto"  
        }  
    }  
}  

预期结果:

safeAreaInsets.bottom 出现正确的值,并且safeArea.height值正确

实际结果:

"safeArea": {  
    "left": 0,  
    "right": 375,  
    "top": 44,  
    "bottom": 690,  
    "width": 375,  
    "height": 646  
},  
"safeAreaInsets": {  
    "top": 44,  
    "right": 0,  
    "bottom": 0,  
    "left": 0  
},  
"screenHeight": 812,  
"screenWidth": 375,  
"statusBarHeight": 44  

1 回复

uni-app 开发中,处理 iPhone X 及以后的全面屏设备的安全区域(Safe Area)问题时,可能会遇到安全区域值不正确的情况。这通常是由于样式或配置问题导致的。以下是一些常见的解决方案和步骤,帮助你正确设置安全区域。

1. 使用 viewport-fit=cover

确保在 index.htmlpages.json 中正确设置了 viewportviewport-fit 属性。这是处理安全区域的第一步。

<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0, viewport-fit=cover">

2. 使用 env(safe-area-inset-*)

在 CSS 中,使用 env(safe-area-inset-*) 来处理安全区域的边距。env(safe-area-inset-top)env(safe-area-inset-bottom)env(safe-area-inset-left)env(safe-area-inset-right) 可以获取设备的安全区域值。

body {
  padding-top: env(safe-area-inset-top);
  padding-bottom: env(safe-area-inset-bottom);
  padding-left: env(safe-area-inset-left);
  padding-right: env(safe-area-inset-right);
}

3. 使用 uni-app 提供的 safe-area 样式类

uni-app 提供了内置的 safe-area 样式类,可以直接使用这些类来处理安全区域。

<view class="safe-area">
  <!-- 你的内容 -->
</view>
.safe-area {
  padding-top: var(--status-bar-height);
  padding-bottom: env(safe-area-inset-bottom);
}

4. 检查 pages.json 配置

pages.json 中,确保 navigationBartabBar 的设置正确,尤其是 navigationBar 的高度和 tabBar 的位置。

{
  "pages": [
    {
      "path": "pages/index/index",
      "style": {
        "navigationBarTitleText": "首页",
        "navigationBarBackgroundColor": "#ffffff",
        "navigationBarTextStyle": "black"
      }
    }
  ],
  "tabBar": {
    "list": [
      {
        "pagePath": "pages/index/index",
        "text": "首页"
      }
    ],
    "backgroundColor": "#ffffff",
    "selectedColor": "#007AFF",
    "color": "#8a8a8a",
    "borderStyle": "black"
  }
}

5. 使用 uni.getSystemInfoSync 获取设备信息

你可以通过 uni.getSystemInfoSync() 获取设备的安全区域信息,并在代码中动态调整布局。

const systemInfo = uni.getSystemInfoSync();
const safeArea = systemInfo.safeArea;

console.log('安全区域:', safeArea);

6. 使用 uni-app 插件

如果你仍然遇到问题,可以考虑使用 uni-app 社区提供的插件来处理安全区域问题。例如,uni-safe-area 插件可以帮助你更方便地处理安全区域。

7. 检查 manifest.json 配置

manifest.json 中,确保 app-plus 的配置正确,尤其是 safearea 相关的设置。

{
  "app-plus": {
    "safearea": {
      "bottom": {
        "offset": "none"
      }
    }
  }
}

8. 更新 uni-app 版本

确保你使用的是最新版本的 uni-app,因为新版本可能会修复一些与安全区域相关的 bug。

npm update [@dcloudio](/user/dcloudio)/uni-app
回到顶部
AI 助手
你好,我是IT营的 AI 助手
您可以尝试点击下方的快捷入口开启体验!