右上角的menuButton在ipad获取的宽高间距不对

解决方案:目前无法获取准确的兼容数据,处理方案可以适当进行调试或修改布局
ipad(横屏、竖屏一样,切换后没有重新适应):
在这里插入图片描述

android ipad横屏:
android ipad横屏
相关的事件如下:
initTitlebarPosition initMenuButtonBounding

位置发生变化,但这个并没有触发:wx.onMenuButtonBoundingClientRectWeightChange(this.initMenuButtonBoundingBindThis);

也就是说,ipad属于首次获取就不对,menuButton表现的大了许多;android ipad切换横竖屏但位更新数值。

安全距离

获取env(safe-area-inset-bottom);桌面端及ipad是没有底部安全距离的,因此在做开发评审设计稿的时候要同步清楚。
部分全局变量:app.less确保引入@import url('./static/vars.less');

const systemInfo = wx.getSystemInfoSync();
const { windowHeight } = systemInfo;
const safeAreaBottom = systemInfo.screenHeight - systemInfo.safeArea.bottom;

微信小程序 systemInfo.screenHeight 、windowHeight 指什么

1. screenHeight vs windowHeight

  • screenHeight:设备的总屏幕高度,包含状态栏、导航栏、底部虚拟按键(如 Android 的导航栏或 iPhone 的 Home Indicator)等系统界面占用的区域。它是设备物理屏幕的完整高度。
  • windowHeight:页面可用内容区域的高度,即去除导航栏、状态栏、底部 TabBar 后的高度。实际还是要看你自行设置的页面高度,通常开发会将顶部和底部定位上去,其他的是整屏幕高度=screenHeight
   const systemInfo = wx.getSystemInfoSync();
   console.log(screenHeight); // 例如 iPhone 13 的 844px(全屏)
   console.log(windowHeight); // 例如 724px(去除导航栏后的可用区域)

2. safeArea

  • safeArea 是一个对象,表示安全区域的坐标范围(如 iPhone 的刘海屏或圆角屏中不被遮挡的区域)。
  • safeArea.bottom 是安全区域的底部坐标(基于 screenHeight 的坐标系)。

高度关系:screenHeight > safeArea.bottom ≥ windowHeight

注意事项

  1. 坐标系方向
    screenHeight 的坐标系原点在屏幕左上角,向下为正向。因此 safeArea.bottom 的值越大,表示安全区域越接近屏幕底部。

  2. 兼容性

    • safeArea 在 iOS 10+ 和部分 Android 设备中支持,低版本设备可能不返回此字段,需做兼容处理:
 const safeAreaBottomInset = systemInfo.safeArea
   ? systemInfo.screenHeight - systemInfo.safeArea.bottom
   : 0; // 默认值
Logo

北京人形旗下天工造物具身智能开源社区,聚焦具身天工与慧思开物两大平台

更多推荐