uni-app動態獲取屏幕邊界到安全區域距離的完整教程

目錄

一、什么是安全區域?

二、獲取安全區域距離的核心方法

三、JavaScript動態獲取安全區域距離

1. 核心API

2. 完整代碼示例

3. 關鍵點說明

四、CSS環境變量適配安全區域

1. 使用?env()?和?constant()

3. 注意事項

五、不同平臺的適配策略

1. H5 端

2. 小程序端

3. App端

六、總結


一、什么是安全區域?

安全區域是指屏幕邊緣預留的非內容顯示區域,用于避免UI元素被系統組件(如狀態欄、底部導航欄)遮擋。在全面屏設備中,安全區域的頂部和底部距離尤為重要。例如:

  • 頂部安全距離:狀態欄高度(如iPhone的劉海區域)。
  • 底部安全距離:設備底部的傳感器區域或虛擬按鍵區域。

二、獲取安全區域距離的核心方法

在uni-app中,可以通過以下兩種方式動態獲取安全區域距離:

  1. JavaScript API:使用?uni.getSystemInfoSync()?獲取系統信息。
  2. CSS環境變量:通過?env(safe-area-inset-xxx)?和?constant(safe-area-inset-xxx)?實現樣式適配。

?

三、JavaScript動態獲取安全區域距離

1. 核心API
const systemInfo = uni.getSystemInfoSync();
const { safeAreaInsets } = systemInfo;
console.log("頂部安全距離:", safeAreaInsets.top);
console.log("底部安全距離:", safeAreaInsets.bottom);
2. 完整代碼示例
<template><view class="container" :style="{ paddingBottom: bottomPadding + 'px' }"><!-- 頁面內容 --><view class="content">動態適配安全區域</view></view>
</template><script>
export default {data() {return {bottomPadding: 0, // 底部安全距離};},onReady() {this.getSafeAreaInsets();},methods: {getSafeAreaInsets() {try {const systemInfo = uni.getSystemInfoSync();const { safeAreaInsets } = systemInfo;// 設置底部安全距離this.bottomPadding = safeAreaInsets.bottom;// 可選:設置頂部安全距離const topPadding = safeAreaInsets.top;console.log("頂部安全距離:", topPadding);} catch (err) {console.error("獲取安全區域失敗:", err);}},},
};
</script><style>
.container {background-color: #f0f0f0;position: relative;
}.content {padding: 20px;
}
</style>
3. 關鍵點說明
  • uni.getSystemInfoSync():同步獲取系統信息,包含?safeAreaInsets(安全區域距離)。
  • safeAreaInsets:對象包含?topleftrightbottom?四個屬性,分別表示安全區域到屏幕邊緣的距離。
  • 兼容性:此方法適用于所有平臺(H5、小程序、App),但部分安卓設備可能需要額外測試。

?

四、CSS環境變量適配安全區域

1. 使用?env()?和?constant()

在CSS中,可以通過環境變量直接設置安全區域的內邊距或外邊距:

/* 底部安全區域適配 */
.container {padding-bottom: constant(safe-area-inset-bottom); /* 兼容 iOS < 11.2 */padding-bottom: env(safe-area-inset-bottom);      /* 兼容 iOS >= 11.2 */
}/* 頂部安全區域適配 */
.header {padding-top: env(safe-area-inset-top);
}

?2. 完整代碼示例

<template><view class="container"><view class="header">頂部導航欄</view><view class="content">頁面內容</view><view class="footer">底部導航欄</view></view>
</template><style>
.container {background-color: #ffffff;height: 100vh;display: flex;flex-direction: column;
}.header {padding-top: env(safe-area-inset-top); /* 適配頂部安全區域 */background-color: #f8f8f8;height: 60px;text-align: center;line-height: 60px;
}.content {flex: 1;background-color: #e0e0e0;
}.footer {padding-bottom: env(safe-area-inset-bottom); /* 適配底部安全區域 */height: 60px;background-color: #f0f0f0;text-align: center;line-height: 60px;
}
</style>
3. 注意事項
  • 順序要求constant()?和?env()?必須同時存在,且?constant()?在前。
  • 兼容性env()?僅支持 iOS 11.2+ 和部分安卓機型,需結合JavaScript動態適配。

?

五、不同平臺的適配策略

1. H5 端
  • 推薦方法:優先使用?uni.getSystemInfoSync()?動態計算安全區域距離。
  • CSS限制:部分瀏覽器不支持?env(),需通過JavaScript動態設置樣式。
2. 小程序端
  • 安全區域APIuni.getSystemInfoSync()?支持所有平臺。
  • CSS適配env()?在微信小程序中可能不可用,建議通過JavaScript動態設置。
3. App端
  • 原生配置:在?manifest.json?中配置安全區域(僅限App端):
{"plus": {"distribute": {"android": {"webview": {"overflow": "hidden"}}}}
}

?

六、總結

通過結合JavaScript動態獲取安全區域距離和CSS環境變量,可以高效適配全面屏設備。以下是關鍵步驟總結:

  1. JavaScript動態適配:使用?uni.getSystemInfoSync()?獲取?safeAreaInsets
  2. CSS環境變量:通過?env(safe-area-inset-xxx)?設置內邊距或外邊距。
  3. 兼容性處理:針對不同平臺(H5、小程序、App)選擇合適的適配策略。

?

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/90106.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/90106.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/90106.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

ZKmall開源商城微服務架構實戰:Java 商城系統的模塊化拆分與通信之道

在電商業務高速增長的今天&#xff0c;傳統單體商城系統越來越力不從心 —— 代碼堆成一團、改一點牽一片、想加功能得大動干戈&#xff0c;根本扛不住高并發、多場景的業務需求。微服務架構卻能破這個局&#xff1a;把系統拆成一個個能獨立部署的小服務&#xff0c;每個服務專…

ROS 與 Ubuntu 版本的對應關系

ROS 作為一套用于構建機器人應用的開源框架&#xff0c;其開發和運行高度依賴 Ubuntu 等 Linux 發行版&#xff0c;尤其是 Ubuntu 因其廣泛的兼容性和社區支持&#xff0c;成為了 ROS 最主流的運行平臺。 一、ROS 與 Ubuntu 版本的對應關系&#xff08;截至 2025 年&#xff0c…

GPT-4o mini TTS:領先的文本轉語音技術

什么是 GPT-4o mini TTS&#xff1f; GPT-4o mini TTS 是 OpenAI 推出的全新一代文本轉語音&#xff08;TTS&#xff09;技術&#xff0c;能夠以自然、流暢的方式將普通文本轉換為語音。依托先進的神經網絡架構&#xff0c;GPT-4o mini TTS 在語音合成中避免了傳統 TTS 的生硬…

Git下載全攻略

目標讀者初學者或有經驗的開發者不同操作系統用戶&#xff08;Windows、macOS、Linux&#xff09;下載前的準備確認系統版本和位數&#xff08;32-bit/64-bit&#xff09;檢查網絡環境是否穩定確保有足夠的磁盤空間Windows系統下載Git訪問Git官方網站&#xff08;https://git-s…

ADAS域控軟件架構-網絡管理狀態與喚醒機制

1. 狀態介紹: Sleep Mode:總線睡眠模式,控制器不發送應用報文和網絡管理報文。 Pre-Sleep Mode:準備總線睡眠模式,控制器不發送應用報文和網絡管理報文。 Ready Sleep Mode:就緒睡眠模式,系統發送應用報文但是不發送網絡管理報文。 Normal Operation mode:正常工作模式…

pytest簡單使用和生成測試報告

目錄 1. 基本使用 1--安裝 2--pytest書寫規則 3--為pycharm設置 以 pytest的方式運行 4--setup和teardown 5--setup_class和teardown 2. pytest生成測試報告 基本使用 安裝 pytest文檔地址 pytest documentation pip install pytest點擊pycharm左邊的控制臺按鈕 輸入pip inst…

Spring Boot 第一天知識匯總

一、Spring Boot 是什么&#xff1f;簡單說&#xff0c;Spring Boot 是簡化 Spring 應用開發的框架 —— 它整合了整個 Spring 技術棧&#xff0c;提供了 “一站式” J2EE 開發解決方案。核心優點&#xff1a;快速創建獨立運行的 Spring 項目&#xff0c;無需繁瑣配置&#xff…

MySql主從部署

MySql主從部署 1、操作環境 硬件環境&#xff1a;香橙派5 aarch64架構 軟件環境&#xff1a;Ubuntu 22.04.3 LTS 軟件版本&#xff1a;mysql-8.0.42 操作方式&#xff1a;mysql_1,mysql_2容器 主節點&#xff1a;mysql_1 啟動命令&#xff1a;docker run --name mysql_master \…

Redis——Redis進階命令集詳解(下)

本文詳細介紹了Redis一些復雜命令的使用&#xff0c;包括Redis事務相關命令&#xff0c;如MULTI、EXEC、DISCARD 和 WATCH ,發布訂閱操作命令&#xff0c;如PUBLISH 、SUBSCRIBE 、PSUBSCRIBE ,BitMap操作命令&#xff0c;如SETBIT、GETBIT、BITCOUNT、BITOP&#xff0c;HyperL…

C#使用socket報錯 System.Net.Sockets.SocketException:“在其上下文中,該請求的地址無效。

bind: 在其上下文中&#xff0c;該請求的地址無效。問題定位 程序中運行socket服務端程序時&#xff0c;綁定的IP地址無效&#xff0c;即請求的IP地址在你的機子上找不到。原因有以下幾種可能&#xff1a; 1&#xff09;server端綁定的IP地址不是本機的IP地址。 2&#xff09;之…

計算機底層入門 05 匯編學習環境通用寄存器內存

2.3 匯編學習環境我們通過上一章筆記&#xff0c;得知 計算機好像 只會通過位運算 進行 數字的加法。 而機器語言的魅力就是 位運算&#xff0c;解析規則。它們也都是通過 電路 來進行實現的。這就是 計算機最底層的本質了&#xff01;&#xff01;&#xff01; 匯編語言 所謂的…

Java學習---Spring及其衍生(上)

在 Java 開發領域&#xff0c;Spring 生態占據著舉足輕重的地位。從最初的 Spring 框架到后來的 SpringBoot、SpringMVC 以及 SpringCloud&#xff0c;每一個組件都在不同的場景下發揮著重要作用。本文將深入探討這幾個核心組件&#xff0c;包括它們的定義、原理、作用、優缺點…

LVGL應用和部署(個人開發嵌入式linux產品)

【 聲明&#xff1a;版權所有&#xff0c;歡迎轉載&#xff0c;請勿用于商業用途。 聯系信箱&#xff1a;feixiaoxing 163.com】隨著經濟越來越走向常態化發展&#xff0c;將來的公司基本是兩個趨勢&#xff0c;一個是公司越做越大&#xff0c;越來越趨向于壟斷&#xff1b;另外…

CPU,減少晶體管翻轉次數的編碼

背景 以4比特為單位&#xff0c;共16個數。仔細思考狀態轉換過程中的晶體管翻轉次數。 0000 0001&#xff0c;1 0010&#xff0c;2 0011&#xff0c;1 0100&#xff0c;3 0101&#xff0c;1 0110&#xff0c;2 0111&#xff0c;1 1000&#xff0c;4 1001&#xff0c;1 1010&…

LLM 中的 溫度怎么控制隨機性的?

LLM 中的 溫度怎么控制隨機性的? 在LLM的解碼過程中,溫度(Temperature)通過調整token概率分布的“陡峭程度”來控制隨機性:溫度越低,概率分布越陡峭(高概率token的優勢越明顯),隨機性越低;溫度越高,分布越平緩(高低概率token的差異被縮小),隨機性越高。 溫度,…

freemodbus使用

文章目錄? **CubeMX配置**1. UART配置&#xff08;RS485通信&#xff09;2. Timer配置&#xff08;RTU字符間隔檢測&#xff09;3. GPIO配置&#xff08;RS485方向控制&#xff09;? **STM32F103 RS485 FreeModbus RTU 配置概覽****1?? CubeMX硬件配置****2?? FreeModb…

【Ansible】Ansible 管理 Elasticsearch 集群啟停

一、集群節點信息 通過 Ansible inventory 定義的集群節點分組如下&#xff1a;[es]&#xff08;Elasticsearch 節點&#xff09; 192.168.100.150192.168.100.151192.168.100.152[logstash]&#xff08;Logstash 節點&#xff09; 192.168.100.151[kibana]&#xff08;Kibana …

Effective Python 第15條 不要過分依賴給字典添加條目時所用的順序

引言&#xff1a;字典順序的重要性 在Python編程中&#xff0c;字典&#xff08;dict&#xff09;是一種常用的數據結構&#xff0c;用于存儲鍵值對。然而&#xff0c;字典的迭代順序問題常常困擾著開發者。從Python 3.7開始&#xff0c;字典保證了鍵的插入順序&#xff0c;這一…

事務隔離級別和傳播方式

事務隔離級別 事務隔離級別是數據庫系統中控制事務間相互影響程度的重要機制。不同的隔離級別在數據一致性保證和系統性能之間提供不同的權衡選擇。下面我將詳細解析四種標準隔離級別、它們能解決的問題以及可能存在的并發問題。 一、四種標準隔離級別 1. 讀未提交 (Read Uncom…

不同地區的主要搜索引擎工具

研究seo&#xff0c;想匯總一下不同國家的搜索引擎工具&#xff0c;順帶了解一下這些公司提供的服務。 韓國&#xff1a;NAVER——>LINE 日本: 我還不知道&#xff0c;如果你知道可以評論告訴我 俄羅斯&#xff1a;yandex yandex有點像本土化的google 搜索引擎 郵箱 網盤 在…