uni-app 全屏与虚拟按键隐藏冲突求解决
uni-app 全屏与虚拟按键隐藏冲突求解决
示例代码:
onLaunch: function() {
console.log('App Launch')
// 全屏--去状态栏
plus.navigator.setFullscreen(true);
// 横屏
plus.screen.lockOrientation("landscape-primary");
// 隐藏虚拟按键
plus.navigator.hideSystemNavigation();
},
onShow: function() {
console.log('App Show')
// 全屏--去状态栏
plus.navigator.setFullscreen(true);
// 横屏
plus.screen.lockOrientation("landscape-primary");
// 隐藏虚拟按键
plus.navigator.hideSystemNavigation();
},
onHide: function() {
console.log('App Hide')12
}
操作步骤:
切换页面就会出现
预期结果:
详情页完全覆盖页面,不会出现透明区域(被虚拟按键顶起的)
实际结果:
切换页面就会出现
bug描述:
设置全屏和隐藏虚拟按键之后,跳转页面,详情页底部会出现透明区域(虚拟按键所在的位置,但是虚拟按键是隐藏的,透明区域可以操作前一页的页面)

附件:
更多关于uni-app 全屏与虚拟按键隐藏冲突求解决的实战教程也可以访问 https://www.itying.com/category-93-b0.html
9 回复
页面路由切换,去掉动画的话,确实没问题。这不是有效的解决办法,去掉动画,显得切换很生硬
回复 7***@qq.com: 我没设置动画依然有这个问题。
主动监听onResize 改下高度
怎么修改页面的高度,用css来控制么
回复 7***@qq.com: 是的
回复 DCloud_Android_ST: 这算不算一个bug。因为设置了全屏,是不需要系统自带的虚拟按键,导致出现这块区域,还要手动去修改其他地方,如果可以的话,可以不可以下个版本更新掉这个问题。
加一
在uni-app中,全屏设置与虚拟按键隐藏的冲突通常是由于Android系统对沉浸式模式的兼容性问题导致的。从你的代码和描述来看,问题出现在页面切换时底部出现透明区域,这实际上是系统导航栏隐藏后的残留区域。
建议修改如下:
- 在页面生命周期中统一处理全屏和导航栏隐藏,而不是仅在App.vue的onLaunch和onShow中设置。在需要全屏的页面的onLoad或onShow中添加:
onShow() {
// 设置全屏
plus.navigator.setFullscreen(true);
// 隐藏虚拟按键
if (plus.os.name === 'Android') {
plus.navigator.hideSystemNavigation();
}
}
- 对于Android设备,可以尝试使用沉浸式状态栏替代完全隐藏:
// 在manifest.json中配置沉浸式状态栏
"plus": {
"statusbar": {
"immersed": true
}
}
- 如果问题仍然存在,可能是页面布局未适配全屏模式。检查页面CSS,确保设置了:
page {
height: 100vh;
overflow: hidden;
}
- 考虑在页面切换时添加延时处理,确保全屏设置在页面渲染完成后生效:
setTimeout(() => {
plus.navigator.setFullscreen(true);
plus.navigator.hideSystemNavigation();
}, 100);

