uni-app项目实战笔记17--获取系统信息getSystemInfo状态栏和胶囊按钮

接着上一篇笔记,在添加头部导航栏后,H5显示正常:

但在微信小程序中,由于刘海屏的存在,添加的头部导航栏跟状态栏重叠在一起:

因此需要获取状态栏的高度以便状态栏和导航栏错开不重叠在一起。同时头部导航栏通过与右侧的胶囊按钮在同一水平线上,因此也需要获取胶囊按钮的高度来控制显示。

uniapp提供了获取系统信息的API:getSystemInfo(异步操作),详情可访问uniapp官方文档:系统信息的概念 | uni-app官网。

下面我们通过代码,实现在微信小程序中将头部导航栏与刘海屏,状态栏拉开距离。

<template><view class="layout"><view class="navBar"><view class="statusBar" :style="{height:statusBarHeight+'px'}"></view><view class="titleBar" :style="{height:titleBarHeight+'px'}"><view class="title">标题</view><view class="search"><uni-icons class="icon" type="search" color="#888" size="18"></uni-icons><text class="text">搜索</text></view></view></view><view class="fill" :style="{height:statusBarHeight+titleBarHeight+'px'}"></view></view>
</template><script setup>import {ref} from 'vue'//使用同步获取系统信息let system = uni.getSystemInfoSync();//从系统信息中获取状态栏高度let statusBarHeight= ref(system.statusBarHeight)//获取胶囊按钮信息let MENU_BUTTON = uni.getMenuButtonBoundingClientRect()//获取胶囊按钮的高度和距离顶部的距离let {top,height} =uni.getMenuButtonBoundingClientRect()//获取状态栏高度let titleBarHeight = ref(height+(top-statusBarHeight.value)*2)console.log(titleBarHeight)console.log(top,height)
</script>

知识要点:

  1. 动态适配状态栏高度

    • 通过 uni.getSystemInfoSync() 获取设备系统信息,提取 statusBarHeight(状态栏高度,通常包含时间、电池栏等)。

    • 状态栏高度通过 :style 动态绑定到顶部占位视图(避免内容被状态栏遮挡)。

  2. 动态计算标题栏高度

    • 通过 uni.getMenuButtonBoundingClientRect() 获取小程序胶囊按钮的位置信息(如微信小程序右上角的菜单按钮)。

    • 根据胶囊按钮的 top(距离顶部距离)和 height(高度),结合状态栏高度,计算出标题栏的实际高度 titleBarHeight

      • 公式:标题栏高度 = 胶囊按钮高度 + (胶囊按钮top - 状态栏高度) * 2
        (目的是让标题栏高度包含胶囊按钮的上下边距,保持视觉居中)

      • top - statusBarHeight:胶囊按钮顶部到状态栏底部的距离,乘以 2 表示上下对称留白(保证标题文字垂直居中)。

  3. 完整的导航栏结构

    • 状态栏占位:透明区域,高度为 statusBarHeight

    • 标题栏内容

      • 左侧显示固定标题“标题”。

      • 右侧显示搜索图标和文字(通过 uni-icons 组件实现)。

    • 底部填充块:用 fill 视图填充导航栏占用的空间,防止页面内容被导航栏覆盖。

 最终效果:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/bicheng/86323.shtml
繁体地址,请注明出处:http://hk.pswp.cn/bicheng/86323.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Windows下Zookeeper客户端启动缓慢问题分析与解决方案

文章目录 1. 问题描述2. 问题分析2.1 性能分析2.2 根本原因 3. 解决方案3.1 临时解决方案3.2 长期解决方案 4. 注意事项5. 结论 1. 问题描述 在Windows 8.1 64-bit操作系统环境下&#xff0c;使用Curator框架连接Zookeeper时出现客户端启动异常缓慢的问题。具体表现为&#xf…

在 Java 中生成 PDF 缩略图(教程)

Java 本身无法自动生成 PDF 页面缩略图&#xff0c;但幸运的是&#xff0c;有许多软件库可以实现这一功能。本文示例使用我们自家的 JPedal 库&#xff0c;仅需几行 Java 代码即可创建缩略图。JPedal 是开发者使用的最佳 Java PDF 库。 如何使用 JPedal 将 PDF 转换为缩略图 …

基于大模型的甲状腺结节预测及综合诊疗技术方案大纲

目录 一、技术方案概述二、术前预测与方案制定2.1 结节特征分析与良恶性预测2.2 手术方案建议2.3 麻醉方案优化三、术中辅助决策3.1 实时数据监测与分析3.2 麻醉深度监控与调节四、术后护理与并发症预测4.1 术后恢复预测4.2 并发症风险预警五、统计分析与技术验证5.1 数据分割与…

SpringCloud系列(36)--SpringCloud Gateway简介

1、SpringCloud GateWay概述 SpringCloud Gateway是 Spring Cloud的一个全新项目&#xff0c;基于Spring 5.0Spring Boot 2.0和Project Reactor等技术开发的网关&#xff0c;它旨在为微服务架构提供一种简单有效的统—的API路由管理方式&#xff1b;SpringCloud Gateway作为Sp…

TensorFlow深度学习实战:构建神经网络全指南

引言&#xff1a;深度学习与TensorFlow概览 深度学习作为机器学习的一个重要分支&#xff0c;近年来在计算机视觉、自然语言处理、语音识别等领域取得了突破性进展。TensorFlow是由Google Brain团队开发的开源深度学习框架&#xff0c;自2015年发布以来&#xff0c;已成为最受…

K8S: etcdserver: too many requests

Kubernetes etcdserver: too many requests 错误解决方案 当Kubernetes集群出现 etcdserver: too many requests 错误时&#xff0c;表明etcd数据库接收到的请求量超过了其处理能力。etcd作为Kubernetes的核心组件&#xff0c;存储着集群的所有状态数据&#xff0c;处理请求过…

银河麒麟高级服务器操作系统(全架构)OpenGauss 数据库部署手册

一、部署前准备工作 1. 环境检查 项目配置描述内存功能调试建议 32GB 以上。性能测试和商业部署时&#xff0c;单实例部署建议 128GB 以上。复杂的查询对内存的需求量比较高&#xff0c;在高并发场景下&#xff0c;可能出现内存不足。此时建议使用大内存的机器&#xff0c;或…

Boosting:从理论到实践——集成学习中的偏差征服者

核心定位&#xff1a;一种通过串行训练弱学习器、自适应调整数据权重&#xff0c;将多个弱模型组合成强模型的集成学习框架&#xff0c;专注于降低预测偏差。 本文由「大千AI助手」原创发布&#xff0c;专注用真话讲AI&#xff0c;回归技术本质。拒绝神话或妖魔化。搜索「大千A…

Ubuntu下交叉编译工业相机库aravis到OpenHarmony(aarch64)使用

文章目录 下载交叉编译工具链安装meson编写交叉编译配置文件编译glib编译libiconv编译libxml2编译libusb&#xff08;暂时不编译&#xff0c;依赖的udev库我找不到&#xff09;编译Aravis使用 自行编译的库都统一放到一个地方去&#xff0c;这样引用时方便一些&#xff0c;比如…

深入理解互斥信号量(Mutex)在 FreeRTOS 中的使用与实现

在多任务操作系统中&#xff0c;任务间的同步和资源共享是至关重要的。为了避免多个任务同时访问共享资源&#xff0c;导致资源冲突和数据不一致&#xff0c;信号量&#xff08;Semaphore&#xff09; 是常用的同步机制。特别是在 FreeRTOS 中&#xff0c;互斥信号量&#xff0…

Liunx操作系统笔记2

Linux下的包/源管理命令&#xff1a;主要任务是完成在Linux环境下安装软件。 1.rpm 是最基础的rpm包的安装命令&#xff0c;需要提前下载相关安装包和依赖包。 2.yum/dnf是基于rpm包的自动安装命令&#xff0c;可以自动在仓库中匹配安装软件和依赖包。 3.光盘源 是指的 安装系统…

企业级RAG系统架构设计与实现指南(Java技术栈)

企业级RAG系统架构设计与实现指南&#xff08;Java技术栈&#xff09; 开篇&#xff1a;RAG系统的基本概念与企业应用价值 在当今快速发展的AI技术背景下&#xff0c;检索增强生成&#xff08;Retrieval-Augmented Generation, RAG&#xff09; 已成为构建智能问答、知识库管…

【Rust http编程】Rust搭建webserver的底层原理与应用实战

✨✨ 欢迎大家来到景天科技苑✨✨ &#x1f388;&#x1f388; 养成好习惯&#xff0c;先赞后看哦~&#x1f388;&#x1f388; &#x1f3c6; 作者简介&#xff1a;景天科技苑 &#x1f3c6;《头衔》&#xff1a;大厂架构师&#xff0c;华为云开发者社区专家博主&#xff0c;…

4 Geotools坐标参考系与转换

在地理信息系统 (GIS) 开发中&#xff0c;坐标参考系统 (Coordinate Reference System, CRS) 是核心概念之一。无论是处理地图投影、坐标转换&#xff0c;还是在 Spring Boot 应用中管理空间数据&#xff0c;理解和正确使用 CRS 都至关重要。本文将围绕 GeoTools 库&#xff0c…

docker start mysql失败,解决方案

文章目录 1.查看端口占用情况2.关闭7767进程3.再次检查4.运行docker start mysql 1.查看端口占用情况 sudo netstat -tanlp | grep :33062.关闭7767进程 sudo kill -9 77673.再次检查 进程已关闭 4.运行docker start mysql 正确启动 备注&#xff1a;可能要关闭防火墙

SQL关键字三分钟入门:DELETE —— 删除数据

在数据库操作中&#xff0c;除了添加和修改记录外&#xff0c;我们有时还需要删除不需要的记录。例如&#xff1a; 清除不再使用的用户账号&#xff1b;删除已完成并归档的订单&#xff1b;移除测试时插入的数据。 这时候就需要用到 SQL 中非常基础但极其重要的关键字 —— D…

electron 全量更新

electron-builder.yml配置更新地址 # 配置自动更新的信息 publish:provider: generic # 更新服务提供者url: http://xxx.xxxx.com/pc/xxx-xx# 更新的地址服务器地址 会自动读取latest.yml 下的版本号比较 检测更新方法autoUpdater.js// src/main/autoUpdater.jsimport { app, d…

《大模型 Agent 应用实战指南》第2章:商业目标与 Agent 能力边界定义

在任何技术项目,特别是像大模型 Agent 这样具有创新性和复杂性的项目启动之初,明确清晰的商业目标是成功的基石。这不仅仅是技术团队的职责,更需要产品、运营、销售甚至高层管理者的深度参与。一个明确的目标能确保所有团队成员步调一致,资源有效分配,并最终衡量项目的成功…

提供稳定可靠的自助共享空间系统,支撑客户无人自助门店运营不错数据,历程感想

以技术产品研发系统为主&#xff0c;为客户提供自助共享空间系统解决方案&#xff0c;适用于共享棋牌室&#xff0c;共享麻将室&#xff0c;共享台球室&#xff0c;共享KTV&#xff0c;共享舞蹈室等场景&#xff0c;以下是其中一位客户真实门店运营数据&#xff0c;第一家店本月…

Golang单例实现

Go语言中&#xff0c;实现单例模式的方式有很多种。单例模式确保一个类只有一个实例&#xff0c;并提供一个全局访问点。Go语言没有类的概念&#xff0c;但是可以通过结构体、函数和包级变量来实现类似的功能。 懒汉实现 type Product interface {DoSomething() }type single…