uniapp开发H5 手机端app的webview进入H5,调用uni.getWindowInfo(),获取到的statusBarHeight为0
- 发布:2026-08-14 11:38
- 更新:2026-08-14 15:44
- 阅读:68
产品分类: uniapp/H5
PC开发环境操作系统: Windows
PC开发环境操作系统版本号: 11
HBuilderX类型: 正式
HBuilderX版本号: 5.24
浏览器平台: 手机系统浏览器
浏览器版本: 安卓app内置webview
项目创建方式: HBuilderX
操作步骤:
预期结果:
正常获取statusBarHeight高度
正常获取statusBarHeight高度
实际结果:
statusBarHeight为0
statusBarHeight为0
bug描述:
开发的H5,用自己开发的手机App进入,安卓端uni.getWindowInfo()获取的statusBarHeight一直都为0,页面刚进入的时候为0,onReady生命周期调用也为0。iOS端的表现是,初始化进入的时候获取为0,但是延迟100ms左右就可以正常获取到状态栏高度。
4 个回复
Ask小助手
感谢您的反馈。针对您提交的 Bug 反馈,我们从官方视角进行了评审,具体评估如下:
1. Bug 反馈内容完整性分析
uni.getDeviceInfo()获取statusBarHeight为 0 的现象,并对比了 iOS 端延迟可获取的表现。但缺少关键的项目信息,例如您的 H5 项目是 Vue2 还是 Vue3,以及您自己的安卓 App 在加载 WebView 时是否有特殊的沉浸式状态栏配置或 WebView 初始化参数设置。uni.getDeviceInfo()的生命周期和上下文),以便官方人员直接运行验证,而不需要自行补全代码。2. Bug 是否成立分析
根据官方文档和知识库信息,
uni.getDeviceInfo()的返回参数中实际上并不包含statusBarHeight(状态栏高度)。状态栏高度属于窗口/系统环境信息,应通过uni.getWindowInfo()或uni.getSystemInfoSync()获取。在 H5 平台中,
--status-bar-heightCSS 变量的默认值即为0。当 H5 被嵌入到 App 的 WebView 中时,状态栏高度能否获取以及获取的时机,很大程度上取决于宿主 App 的 WebView 容器是否将状态栏高度信息正确传递给了前端环境。这通常涉及原生 App 对 WebView 的配置(如沉浸式状态栏处理)。此外,官方文档明确说明:“高度相关信息,要放在 onReady 里获取。太早取不到。”这也解释了为何在 iOS 端初始化时为 0,而延迟 100ms 左右可以正常获取。
由于
uni.getDeviceInfo()本身不返回statusBarHeight,且 H5 端获取该高度受限于宿主 WebView 环境,当前信息不足以判定 uni-app 框架存在缺陷。建议您:uni.getWindowInfo或uni.getSystemInfoSync)。Leaf27 (作者)
api写错了,是uni.getWindowInfo()返回的statusBarHeight为0
Leaf27 (作者)
@DCloud_HB_GX @DCloud_UNI_JBB @DCloud_UNI_yuhe
Sun_
等官方修复之前,分享一个我的修复方案,在APP内嵌H5的页面可以这样写,但是有一个问题,状态栏背景颜色没法设置
Leaf27 (作者)
您这个是app-plus的方法,我这个是H5的项目,然后在我们自己app中用webview打开这个页面时,获取的statusBarHeight为0
2026-08-14 16:02
Leaf27 (作者)
我现在的临时方案是,iOS系统打开时就延迟100ms再去获取状态栏高度,更新样式。Android端,对于异形屏,getWindowInfo会返回一个screenTop,用这个当做状态栏的高度。对于正常屏,如果取到的statusBarHeight是0,则给定一个默认的24px高度。
57 分钟前
要回复问题请先登录或注册
公告
更多>相关问题