- 关于状态栏(statusBar)、导航栏(navBar)、底部安全区域高度的计算问题?!
测试使用的Android设备:小米10至尊纪念版 苹果设备:iPhone X 微信开发工具的模拟器:iPhone X 将手机分为四个区域,分别是“状态栏(statusBar)、导航栏(navBar)、内容区域、底部安全区域(bottomSafe)”,如图所示 [图片] 已知前提如下 statusBar的高度可以通过wx.getWindowInfo().statusBarHeight获取到navBar的高度等于胶囊高度+上下边距wx.getWindowInfo().safeArea.height的值表示“内容区域 + 导航栏”的高度 要探讨的问题 当navigationStyle为custom时,以上已知全部成立,但是为default时,第二条已知似乎有问题 正确的表现(navigationStyle: custom) 首先来看代码在不同设备、系统下正常的表现(高度全部占满,无纵向滑动条出现)[图片] 各文件代码 <!-- index.wxml --> <view class="status-bar" style="height: {{statusBarHeight}}px;"></view> <!-- <view class="nav-bar" style="height: {{navBarHeight}}px;"></view> --> <view class="safe" style="height: {{safeHeight}}px;"></view> <view class="bottom-safe" style="height: {{bottomSafeHeight}}px;"></view> // index.js Page({ data: { statusBarHeight: 0, navBarHeight: 0, safeHeight: 0, bottomSafeHeight: 0, }, onLoad() { // 获取的数值单位是px const windowInfo = wx.getWindowInfo(); const menuButtonInfo = wx.getMenuButtonBoundingClientRect(); console.log(windowInfo); console.log(menuButtonInfo); let statusBarHeight = windowInfo.statusBarHeight; let navBarHeight = menuButtonInfo.height + (menuButtonInfo.top - statusBarHeight) * 2; let safeHeight = windowInfo.safeArea.height; let bottomSafeHeight = windowInfo.screenHeight - windowInfo.safeArea.height - statusBarHeight; this.setData({ statusBarHeight, navBarHeight, safeHeight, bottomSafeHeight, }); console.log("statusBarHeight", statusBarHeight); console.log("navBarHeight", navBarHeight); console.log("safeHeight", safeHeight); console.log("bottomSafeHeight", bottomSafeHeight); }, }); /* index.wxss */ page { background-color: red; } view { width: 100%; } .status-bar { background-color: rgb(55, 150, 187); } .nav-bar { background-color: bisque; } .safe { background-color: burlywood; } .bottom-safe { background-color: rgb(59, 112, 209); } // index.json { "usingComponents": {}, "navigationStyle": "custom" } 当navigationStyle为default时,状态栏和导航栏都会使用微信默认的,所以应该把自己写的状态栏和导航栏的view删除,因为safeHeight还包含了导航栏高度,所以内容区域的高度应该是safeHeight - navBarHeight <!-- index.wxml就变成了这样 --> <!-- <view class="status-bar" style="height: {{statusBarHeight}}px;"></view> --> <!-- <view class="nav-bar" style="height: {{navBarHeight}}px;"></view> --> <view class="safe" style="height: {{safeHeight-navBarHeight}}px;"></view> as <view class="bottom-safe" style="height: {{bottomSafeHeight}}px;"></view> 此前,模拟器和真机上的表现是一直的,但是在这里,就不一致了 模拟器上出现了滚动条,iPhone真机表现高度都正常,Android真机表现底部缺少了1像素(背景是红色的,可以看到底部出现了1像素高度的红色) [图片] [图片] 猜测这个问题是因为导航栏(navBar)高度计算不对导致的,间接导致了内容区域高度不正确 之前导航栏的高度是胶囊高度+胶囊上下边距,上下边距相等 胶囊左上角到状态栏顶边的垂直距离如图所示(蓝色线段),代码为:wx.getMenuButtonBoundingClientRect().top [图片] 胶囊左上角到状态栏顶边的垂直距离 减去 状态栏的高度 就是一个边距的值,所以 menuButtonInfo.height + (menuButtonInfo.top - statusBarHeight) * 2 就是导航栏的高度,但是nagivationStyle为default时,似乎就不是这么计算的了?请问官方,这时候导航栏的高度是怎么计算的呢? 以上代码已上传到代码片段 参考的文章 https://developers.weixin.qq.com/community/develop/article/doc/00008a245604d8a1a8ce322345bc13https://developers.weixin.qq.com/community/develop/article/doc/0000ecde0e49a85a314c9d44d51013
08-29 - wx.getWindowInfo()返回的safeArea具体表示的是什么区域的?
safeArea下的top、bottom、left、height这些值具体都是哪些区域的值?
08-28 - 请问有哪些好用的全局状态管理库呢?
用小程序原生开发,不用uni-app的话,有哪些好用的全局状态管理库呢?除了mobx-miniprogram以外
08-14 - 请问小程序有没有可以替代setData方法的插件?
设置一个基本类型的变量时,需要写至少三行代码 this.setData({ name: 'xiaoming' }) 如果是修改对象里的属性,就更麻烦了 this.setData({ ['personal.name']: 'xiaoming' }) 如果是修改对象里数组的属性,就更更更麻烦了 let index = 1 this.setData({ ['personal.hobby[' + index + '].label']: '篮球' }) 这种写法是不人性的,更符合编程直觉的写法是 this.name = 'xiaoming' this.personal.name = 'xiaoming' this.personal.hobby[1].label = '篮球' 事实上,在westore里面就是这么写的,但是我不想仅仅为了改变setData的方式就去集成一个westore 所以想问一下有没有纯粹的能改善微信小程序这种写法的“第三方库、模块”或者“插件”
07-19 - 微信官方能不能推出一个类似Vue.js devtools的工具?
现在遇到的问题是,想查看Component内的数据,都得靠打印 想看store里的数据也非常不方便 在Vue.js devtools里边选择Vuex、Pinia的面板就能看到这些信息了
07-19 - 关于wx.createBLEConnection的超时问题?
文档地址:https://developers.weixin.qq.com/miniprogram/dev/api/device/bluetooth-ble/wx.createBLEConnection.html 调用这个API,传了timeout: 2000,但是2000后并没有触发fail回调,大概过了30秒左右才触发,在论坛搜到了相关帖子,但看到官方也没回复怎么解决 相关帖子:https://developers.weixin.qq.com/community/develop/doc/0000e229bf4b10045a8f71da351000?highline=%E5%85%B3%E4%BA%8Ewx.createBLEConnection%E7%9A%84%E8%B6%85%E6%97%B6%E9%97%AE%E9%A2%98
2023-12-20 - 关于云测使用的问题!?
云测的要求中有一条是“必须发布过线上版本” 请问云测只能测试线上版本的小程序吗?如果想测开发版或体验版有办法吗?
2023-11-22 - 关于getPhoneNumber的权限问题?
https://developers.weixin.qq.com/miniprogram/dev/framework/open-ability/getPhoneNumber.html 这个能力要企业认证才能用,我们在开发阶段不一定有企业认证的账号,有办法使用这个能力吗?
2023-10-09 - 请问获取手机号是用getPhoneNumber这个API吗?
向如图这种获取手机号是用“getPhoneNumber”这个API吗? [图片]
2023-10-07 - 关于微信开发者工具“可视化”功能的bug
问题描述:在使用可视化工具操作image组件的属性时,出现错乱(操作mode的属性,改变了src属性的值) 问题复现:mode选择aspectFill,然后清空选择的内容,然后再随便选择一个mode的属性值,此时选择的值就会变成src属性的值 复现过程GIF图:如下图 [图片]
2023-09-28