基于uniapp开发小程序自定义顶部导航栏状态栏标题栏

效果预览

实现原理:使用官方api获取系统信息,从系统信息里获取状态栏和胶囊按钮栏的高度信息,通过计算获取相应的顶部导航栏高度即可自定义

uniapp官方文档地址:https://uniapp.dcloud.net.cn/api/system/info.html

1 获取状态栏高度

javascript 复制代码
	// 获取窗口信息
	let WINDOW_INFO = uni.getWindowInfo()
	// 状态栏高度
	let statusBarHeight = WINDOW_INFO.statusBarHeight

	console.log('获取窗口信息:', WINDOW_INFO);

2 计算胶囊按钮区域标题栏的高度

通过uni.getMenuButtonBoundingClientRect()

获取胶囊按钮区域的信息,通过自身高度和距顶部的高度计算出该区域的高度

javascript 复制代码
// 标题栏胶囊按钮的信息
	let {top,height} = uni.getMenuButtonBoundingClientRect()
	// 标题栏高度
	let titleBarHeight = height + (top - statusBarHeight) * 2 
	console.log('标题栏高度:', titleBarHeight);

ok到此就可以得到顶部状态栏和标题栏的高度,根据这两个高度信息就可以自定义顶部导航栏了

进阶封装,方便后续使用(推荐使用该方案,已封装完成直接复制粘贴即可使用)

封装好的代码

将以将该工具库放入utils目录下食用

utils===>system.js

javascript 复制代码
//system.js
// uniapp官方文档地址:https://uniapp.dcloud.net.cn/api/system/info.html

// 获取系统信息
const SYSTEM_INFO = uni.getSystemInfoSync();

// 获取顶部状态栏高度
export const getStatusBarHeight = ()=> SYSTEM_INFO.statusBarHeight || 15;

// 计算顶部标题栏高度
export const getTitleBarHeight = ()=>{
	if(uni.getMenuButtonBoundingClientRect){
		let {top,height} = uni.getMenuButtonBoundingClientRect();
		return height + (top - getStatusBarHeight())*2		
	}else{
		// 没有胶囊按钮时默认为40px,可自定义高度
		return 40;
	}
}

// 获取顶部导航栏总共高度
export const  getNavBarHeight = ()=> getStatusBarHeight()+getTitleBarHeight();

// 计算遮挡抖音小程序LOGO遮挡区域
export const getLeftIconLeft = ()=> {
	// #ifdef MP-TOUTIAO
		let {leftIcon:{left,width}}  = tt.getCustomButtonBoundingClientRect();
		return left+ parseInt(width);
	// #endif
	
	// #ifndef MP-TOUTIAO
		return 0
	// #endif	
}

食用方式

在需要的地方引入封装好的方法即可食用

javascript 复制代码
<template>
	<view class="custom-top-navigation-bar">
		 <!-- 食用方法 -->
		<view class="top-status-bar" :style="{height:getStatusBarHeight() + 'px'}">
			顶部状态栏
		</view>
		<view class="top-title-bar" :style="{height:getTitleBarHeight() + 'px'}">
			顶部标题栏
		</view>
	</view>
</template>

<script setup>
	import {
		ref,
		reactive
	} from 'vue';
	import {
		onLoad
	} from '@dcloudio/uni-app';

	// 引入封装好的工具
	import {
		getStatusBarHeight,
		getTitleBarHeight
	} from '@/utils/system.js'
</script>

注意事项

注意:一些开发平台的logo会遮挡我们自定义的顶部导航栏,例如抖音等,因此我们可以使用对应平台的官方API来计算出来遮挡的区域(当然如果只做微信小程序可以忽略此处)

相关推荐
编程迪2 分钟前
基于Java和Vue开发的在线问诊系统医疗咨询小程序APP
小程序
酒鼎6 分钟前
学习笔记(12-02)事件循环 - 实战案例 —⭐
前端·javascript
Bigger11 分钟前
第一章:我是如何剖析 Claude Code 整体架构与启动流程的
前端·aigc·claude
小恰学逆向17 分钟前
【爬虫JS逆向之旅】某球网参数“md5__1038”逆向
javascript·爬虫
竹林81817 分钟前
从“连接失败”到丝滑登录:我用 ethers.js v6 搞定 MetaMask 钱包连接的全过程
前端·javascript
oi..21 分钟前
《Web 安全入门|XSS 漏洞原理、CSP 策略与 HttpOnly 防护实践》
前端·网络·测试工具·安全·web安全·xss
UXbot31 分钟前
2026年AI全链路产品开发工具对比:5款从创意到上线一站式平台深度解析
前端·ui·kotlin·软件构建·swift·原型模式
一拳不是超人40 分钟前
前端工程师也要懂的服务器部署知识:从 Nginx 到 CI/CD
服务器·前端
AlkaidSTART1 小时前
TanStack Query 技术指南:异步状态管理核心实践
前端·react.js
前端那点事1 小时前
前端必看!JS高频实用案例(单行代码+实战场景+十大排序)
javascript