Leaf27
Leaf27
  • 发布:2026-08-14 11:38
  • 更新:2026-08-14 15:44
  • 阅读:68

【报Bug】uni.getWindowInfo()获取的statusBarHeight为0

分类:uni-app

产品分类: uniapp/H5

PC开发环境操作系统: Windows

PC开发环境操作系统版本号: 11

HBuilderX类型: 正式

HBuilderX版本号: 5.24

浏览器平台: 手机系统浏览器

浏览器版本: 安卓app内置webview

项目创建方式: HBuilderX

操作步骤:

uniapp开发H5 手机端app的webview进入H5,调用uni.getWindowInfo(),获取到的statusBarHeight为0

预期结果:

正常获取statusBarHeight高度

实际结果:

statusBarHeight为0

bug描述:

开发的H5,用自己开发的手机App进入,安卓端uni.getWindowInfo()获取的statusBarHeight一直都为0,页面刚进入的时候为0,onReady生命周期调用也为0。iOS端的表现是,初始化进入的时候获取为0,但是延迟100ms左右就可以正常获取到状态栏高度。

2026-08-14 11:38 负责人:无 分享
已邀请:
Ask小助手

Ask小助手

欢迎到专业群( uni-app 官方技术交流群 1 ) 咨询,群中有相关专业的管理员和群友。

感谢您的反馈。针对您提交的 Bug 反馈,我们从官方视角进行了评审,具体评估如下:

1. Bug 反馈内容完整性分析

  • BUG 描述:描述较为清晰,明确指出了在特定环境(H5 嵌入自家安卓 App 的 WebView)下,uni.getDeviceInfo() 获取 statusBarHeight 为 0 的现象,并对比了 iOS 端延迟可获取的表现。但缺少关键的项目信息,例如您的 H5 项目是 Vue2 还是 Vue3,以及您自己的安卓 App 在加载 WebView 时是否有特殊的沉浸式状态栏配置或 WebView 初始化参数设置。
  • 代码示例:缺失。您未提供能够复现该问题的最小化代码示例。建议补充完整的测试代码(包含调用 uni.getDeviceInfo() 的生命周期和上下文),以便官方人员直接运行验证,而不需要自行补全代码。
  • 复现步骤:描述了大致流程,但由于缺少具体的代码工程和您自家安卓 App 的 WebView 配置详情,官方人员难以直接复现。建议补充代码示例,并尽可能说明安卓端 WebView 的环境信息。
  • 预期结果与实际结果:预期结果合理,实际结果描述准确。
  • 分类信息:包含了 PC 环境和 HBuilderX 版本,但缺少手机系统版本、手机机型、Vue 版本等信息,建议补充完整。
  • 附件说明:我无法识别附件内容,如需提供日志或截图,请在正文中以文字形式详细描述。

2. Bug 是否成立分析

根据官方文档和知识库信息,uni.getDeviceInfo() 的返回参数中实际上并不包含 statusBarHeight(状态栏高度)。状态栏高度属于窗口/系统环境信息,应通过 uni.getWindowInfo()uni.getSystemInfoSync() 获取。

在 H5 平台中,--status-bar-height CSS 变量的默认值即为 0。当 H5 被嵌入到 App 的 WebView 中时,状态栏高度能否获取以及获取的时机,很大程度上取决于宿主 App 的 WebView 容器是否将状态栏高度信息正确传递给了前端环境。这通常涉及原生 App 对 WebView 的配置(如沉浸式状态栏处理)。

此外,官方文档明确说明:“高度相关信息,要放在 onReady 里获取。太早取不到。”这也解释了为何在 iOS 端初始化时为 0,而延迟 100ms 左右可以正常获取。

由于 uni.getDeviceInfo() 本身不返回 statusBarHeight,且 H5 端获取该高度受限于宿主 WebView 环境,当前信息不足以判定 uni-app 框架存在缺陷。建议您:

  1. 确认获取状态栏高度使用的具体 API(应为 uni.getWindowInfouni.getSystemInfoSync)。
  2. 检查您的安卓 App 在初始化 WebView 时,是否正确配置并传递了状态栏高度信息给前端。
  3. 补充完整的项目信息、复现代码和安卓端 WebView 配置说明后重新提交,以便进一步排查。
内容为 AI 生成,仅供参考
Leaf27

Leaf27 (作者)

api写错了,是uni.getWindowInfo()返回的statusBarHeight为0

Leaf27

Leaf27 (作者)

@DCloud_HB_GX @DCloud_UNI_JBB @DCloud_UNI_yuhe

Sun_

Sun_

等官方修复之前,分享一个我的修复方案,在APP内嵌H5的页面可以这样写,但是有一个问题,状态栏背景颜色没法设置

var wv;//计划创建的webview  
    onReady() {  
        // #ifdef APP-PLUS  
        // 针对部分手机无法在内嵌H5获取到状态栏高度进行修复  
        var currentWebview = this.$scope.$getAppWebview() //此对象相当于html5plus里的plus.webview.currentWebview()。在uni-app里vue页面直接使用plus.webview.currentWebview()无效  
        //如果是页面初始化调用时,需要延时一下  
        setTimeout(function () {  
            wv = currentWebview.children()[0]  
            wv.setStyle({  
                top: uni.getSystemInfoSync().statusBarHeight  
            })  
        }, 1000);  
        // #endif  
    },
  • Leaf27 (作者)

    您这个是app-plus的方法,我这个是H5的项目,然后在我们自己app中用webview打开这个页面时,获取的statusBarHeight为0

    2026-08-14 16:02

  • Leaf27 (作者)

    我现在的临时方案是,iOS系统打开时就延迟100ms再去获取状态栏高度,更新样式。Android端,对于异形屏,getWindowInfo会返回一个screenTop,用这个当做状态栏的高度。对于正常屏,如果取到的statusBarHeight是0,则给定一个默认的24px高度。

    57 分钟前

要回复问题请先登录注册