关于微信小程序自定义导航栏时,如何获取手机状态栏和导航栏高度

news/2024/12/23 3:53:32/

微信小程序导航栏状态栏可修改项

在这里插入图片描述
在微信小程序中,能修改状态栏和导航栏的样式,只能修改背景色、文字颜色(只支持白色/黑色)、和标题文字。
在这里插入图片描述

navigationStyle 可以控制是否显示导航栏。如果设置为custom,则没有状态栏,且导航栏也为可操作空间,即这时候前端可以控制的区域为整个手机屏幕。
在这里插入图片描述

获取微信小程序状态栏高度

获取系统信息方法使用wx.getSystemInfoSync(),该方法的状态栏高度属性statusBarHeight

let res = wx.getSystemInfoSync();
let statusHeight = res.statusBarHeight; // 注意:此时获取到的值的单位为 'px'

在这里插入图片描述

获取微信小程序导航栏高度

方法一(我是不赞同这种方法的): 很多人使用获取胶囊布局信息 wx.getMenuButtonBoundingClientRect(),根据高度及上下位置,结合状态栏高度即可算出导航栏高度
在这里插入图片描述

      let res = wx.getSystemInfoSync();let buttonInfo = wx.getMenuButtonBoundingClientRect()let navBarHeight = (buttonInfo.top - res.statusBarHeight) * 2 + buttonInfo.height

该方法原理: 这个方法是把微信小程序的胶囊按钮位于导航栏中间来使用的,利用胶囊距离顶部的距离减去状态栏的高度,得出胶囊距离导航栏顶部的距离,认为胶囊距离导航栏底部也是这个距离,再加上胶囊按钮的高度就是导航栏的整体高度。
**不认可该方法原因:**这个方法可行的前提是胶囊按钮位于导航栏中间,个人认为胶囊按钮并不位于导航栏中间,即胶囊按钮距离导航栏顶部和导航栏底部的高度是不一样的。
上面的方法,在大多数情况下得出的导航栏高度都是 40px,个人观察和测试,微信小程序的导航栏在大部分机型上都是 44px

在这里插入图片描述
现在我将页面一截图,并把截图设置为半透明
情况一:iPhone6/7/8机型,左侧为自定义导航栏,状态栏 20px,导航栏 40px,右侧为微信自带导航栏,绿色方框内,可以看出左侧比右侧低一点
在这里插入图片描述
情况二:iPhone6/7/8机型,状态栏 20px,导航栏 44px 左侧为自定义导航栏,状态栏 20px,导航栏 44px,右侧为微信自带导航栏,绿色方框内,可以看出两边高度基本一致。
在这里插入图片描述

结论

个人观点:在大多数机型下,微信小程序的导航栏高度就是 44px 不需要借助 wx.getMenuButtonBoundingClientRect() 该方法计算。

自定义导航栏时

因为不同型号的手机的状态栏高度是不一样的,但是导航栏高度是一样的,状态栏高度使用 wx.getSystemInfoSync().statusBarHeight 获取,注意单位是 px ,导航栏高度设置为 44px
因为在微信小程序中,经常使用 rpx 作为单位。
rpx 单位本质上就是一个百分比单位:100%为 750rpx,若想将 px 转为 rpx

let navBarHeight = 44let navBarHeightNew = navBarHeight * 750 / wx.getSystemInfoSync().windowWidth;

在 uniapp 中,可以使用 uni.upx2px() px 转为 rpx

uni.upx2px(44)

如有错误,欢迎指正,谢谢!
以上内容仅供参考,欢迎大家讨论。


http://www.ppmy.cn/news/804540.html

相关文章

苹果手机状态栏高度总结

手机型号状态栏高度导航栏高度iphone 6 plus60px132pxiphone 640px88pxiphone 540px88pxiphone 440px88pxiphone x132px132px iPhone 6s/7/8 Plus和iPhone X采用的是3倍率的分辨率(3X)使用3倍图 iphone 4、5、6(2X)使用2倍图 开发的时候我们按照1倍屏来做。所以上面的3倍屏要…

微信小程序苹果手机statusBarHeight状态栏高度为0

statusBarHeight状态栏高度 前言安卓手机竖屏statusBarHeight横屏statusBarHeight 苹果手机竖屏statusBarHeight横屏statusBarHeight 总结 前言 最近在做小程序横屏页面时,发现刘海屏头部挡住了左侧页面部分内容,遂将刘海屏挤占部分腾出来,页…

高品质蓝牙耳机:音质最好的运动蓝牙耳机是什么牌子?

现如今,电子产品泛滥,而蓝牙耳机也已经成为了生活中不必可少的产品。在购买蓝牙耳机的时候,大家都非常重视性价比,毕竟谁都想要花最少的钱,购买质量最棒的产品。高性能的蓝牙耳机,不仅拥有超强的性能&#…

小米在英国的1英镑闪购活动凸显其不熟悉欧洲市场

在印度市场大获成功,让小米的信心膨胀了,其在今年开始强势进军欧洲市场,希望在该市场取得同样的成功,然而近日小米在英国的1英镑闪购活动惹怒英国消费者却凸显出这家企业不熟悉欧洲市场。 欧洲市场与新兴市场不同 欧洲和美国两个大…

哪个牌子的蓝牙耳机好,佩戴舒适实用的蓝牙耳机

大众对耳机的需求越来越多,不仅仅是自身需要,也是社会性需要,公共场所尽量避免公放,开放环境的噪音较多,都显示出了耳机的重要性。而蓝牙耳机似乎比线式更胜一筹,前者更便捷,更灵活。下面四款蓝牙耳机,供你挑选。 第一…

Java基础---动态代理

目录 典型回答 静态代理和动态代理的区别 动态代理的用途 Spring AOP的实现方式 JDK 动态代理的代码段 Cglib动态代理的代码段 典型回答 动态代理就是,在程序运行期,创建目标对象的代理对象,并对目标对象中的方法进行功能性增强的一种技…

蓝牙主动降噪耳机哪个好?主动降噪耳机排名

不知道从什么时候开始人们就已经都开始入手蓝牙耳机了,不光是时尚,而且戴起来方便,如果开车时不能接电话,跑步时戴着不累赘。可是现在市场上的蓝牙耳机的款式很多,如果真的想选择一款性价比高的耳机,就跟着…

nokia6 android one,Android One 大对决!Nokia 6.1 Plus vs 小米 A2 大比拼

Android 9 Pie 终于正式登场!想抢先体验到新系统,又买不到行货的 Pixel,另一选择当然系运行原生系统的 Android One 手机。适逢最近小米、Nokia 都系齐齐推出新一代 Android One 手机:小米 A2 及 Nokia 6.1 Plus,同样主…