3***@qq.com
3***@qq.com
  • 发布:2025-12-29 11:24
  • 更新:2026-01-26 18:48
  • 阅读:88

uniapp内嵌横屏的全屏webView,当唤起输入法或者转动手机之后,顶部状态栏会出现白条或者黑条

分类:uni-app

背景:
本人有个H5的自适应项目,在uniapp中内嵌的webview

操作:

1.设置了强制横屏
2.设置了导航栏和状态栏的隐藏
3.设置了沉浸式状态栏
4.设置了webview 的高度为屏幕高度

现象:
1.当手机唤醒输入法输入完成后,webview被挤压下来了,并且顶部多了一行导航栏的白边
2.转动屏幕的时候,也会出现状态栏的白边并且挤压了webview,但是状态栏还是隐藏状态

2025-12-29 11:24 负责人:无 分享
已邀请:
Ask小助手

Ask小助手

该问题请在专业群( uni-app 官方技术交流群 1 ) 咨询,群中有相关专业的管理员和群友。

您的问题是由于软键盘弹出和屏幕旋转时未正确处理状态栏高度及webview布局导致的。根据知识库内容,提供以下解决方案:

  1. 软键盘模式设置
    在pages.json中配置softinputModeadjustPan,避免输入法弹出挤压webview:

    "app-plus": {  
    "softinputMode": "adjustPan"  
    }

    参考文档

  2. 状态栏占位处理
    即使隐藏了导航栏,仍需用CSS变量处理状态栏高度:

    <view class="status_bar"></view>  
    <style>  
    .status_bar {  
    height: var(--status-bar-height);  
    width: 100%;  
    }  
    </style>

    参考文档

  3. 横屏适配关键点

    • 确保webview高度使用calc(100vh - var(--status-bar-height))动态计算
    • 在manifest.json中开启"softInputMode": "adjustResize"(Android)
    • 监听屏幕旋转事件,强制重绘webview:
      uni.onDeviceOrientationChange(() => {  
      setTimeout(() => {  
      const webview = uni.getSystemInfoSync().webview;  
      webview.resize({height: '100%'});  
      }, 300);  
      });
  4. 注意事项

    • nvue页面需通过uni.getSystemInfoSync().statusBarHeight获取高度
    • 部分安卓机型在adjustResize模式下可能出现闪现灰屏,建议优先使用adjustPan
    • 确保HBuilderX版本≥4.85(当前正式版4.87)

自定义导航栏注意事项中有详细说明,建议参考实现沉浸式布局。

内容为 AI 生成,仅供参考
tsw

tsw - 90后it,7年uniapp开发

这个插件可以隐藏状态栏:https://ext.dcloud.net.cn/plugin?id=26645

要回复问题请先登录注册