目录

一、什么是安全区域?

二、获取安全区域距离的核心方法

三、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 搜索引擎 邮箱 网盘 在…