onReady() {
this.$nextTick(function() {
uni.getSystemInfo({
success: res => {
console.log("res.windowHeight:"+res.windowHeight);
const query = uni.createSelectorQuery().in(this);
query.select('.header-bg').boundingClientRect(data => {
console.log("res.windowHeight:"+res.windowHeight);
console.log("data.height:"+data.height);
_this.contentsHeight=res.windowHeight - data.height-12;
_this.boxHeight=res.windowHeight - data.height - 12;
console.log("_this.contentsHeight:"+_this.contentsHeight);
}).exec();
}
});
});
},
- 发布:2026-01-04 13:23
- 更新:2026-01-04 13:51
- 阅读:37
产品分类: uniapp/App
PC开发环境操作系统: Windows
PC开发环境操作系统版本号: win10
HBuilderX类型: 正式
HBuilderX版本号: 4.87
手机系统: HarmonyOS NEXT
手机系统版本号: HarmonyOS 6.0.0
手机厂商: 华为
手机机型: meta60
页面类型: vue
vue版本: vue3
打包方式: 云端
项目创建方式: HBuilderX
示例代码:
操作步骤:
1.在两个tab页面的onReady或mounted方法内通过uni.getSystemInfo获取windowHeight的值。
- 一个tab页面是home.vue,该页面为登录成功后通过uni.switchTab方法跳转,
- 一个tab页面为mytab.vue,该页面通过真机页面点击底部tab按钮跳转
- home页面打印的windowHeight值为837,mytab页面打印的windowHeight值为759。
1.在两个tab页面的onReady或mounted方法内通过uni.getSystemInfo获取windowHeight的值。
- 一个tab页面是home.vue,该页面为登录成功后通过uni.switchTab方法跳转,
- 一个tab页面为mytab.vue,该页面通过真机页面点击底部tab按钮跳转
- home页面打印的windowHeight值为837,mytab页面打印的windowHeight值为759。
预期结果:
期望两个页面的windowHeight值为一致
期望两个页面的windowHeight值为一致
实际结果:
home页面打印的windowHeight值为837,mytab页面打印的windowHeight值为759。
home页面打印的windowHeight值为837,mytab页面打印的windowHeight值为759。
bug描述:
1.在两个tab页面的onReady或mounted方法内通过uni.getSystemInfo获取windowHeight的值。
- 一个tab页面是home.vue,该页面为登录成功后通过uni.switchTab方法跳转,
- 一个tab页面为mytab.vue,该页面通过真机页面点击底部tab按钮跳转
- home页面打印的windowHeight值为837,mytab页面打印的windowHeight值为759。
该bug反馈内容基本完整,提供了标题、描述、代码示例、复现步骤等信息,但缺少关键细节:未说明tabbar是否为自定义样式、manifest.json中tabbar配置及页面是否有自定义导航栏。代码示例可直接运行,但.header-bg元素结构未提供,可能影响复现判断。
此问题不成立,属于概念理解偏差。根据知识库,windowHeight表示可使用窗口高度,其值受当前页面UI元素影响:
- 屏幕高度 = 原生NavigationBar高度 + 可使用窗口高度(windowHeight) + 原生TabBar高度
- windowHeight不包含NavigationBar和TabBar高度
- 不同页面若存在导航栏/状态栏差异(如home.vue可能包含额外导航元素),会导致windowHeight值不同
实际结果符合设计预期:home.vue通过switchTab跳转时可能已渲染完整UI框架(含自定义导航栏),而mytab.vue作为标准tab页面计算方式不同。建议:
- 检查两页面manifest.json中"app-plus"->"navigationBar"配置差异
- 使用safeAreaInsets替代直接计算高度
- 参考tabbar高度说明理解不同跳转方式下的UI渲染时机
非bug而是正常行为,无需修复。开发者应通过const { windowHeight, statusBarHeight } = uni.getSystemInfoSync()结合安全区域计算可用高度,而非假设所有页面windowHeight一致。