uni-app 【报Bug】manifest.json 配置statusbar后 所有页面无法触发uni.onKeyboardHeightChange 获取不到键盘高度

发布于 1周前 作者 zlyuanteng 来自 Uni-App

uni-app 【报Bug】manifest.json 配置statusbar后 所有页面无法触发uni.onKeyboardHeightChange 获取不到键盘高度

开发环境 版本号 项目创建方式
Windows 11 HBuilderX

测试过的手机

  • iphoneX
  • xiaomi13pro

操作步骤:

manifest.json里面配置了"
statusbar" : {
"immersed" : "none",
"style" : "light", //可选,字符串类型,系统状态栏样式(前景颜色),可取值dark、light
"background" : "#RRGGBB" //可选,字符串类型,#RRGGBB格式,系统状态栏背景颜色
},

预期结果:

  • 触发uni.onKeyboardHeightChange

实际结果:

  • 无法触发uni.onKeyboardHeightChange

bug描述:

manifest.json里面配置了" statusbar" : { “immersed” : “none”, “style” : “light”, //可选,字符串类型,系统状态栏样式(前景颜色),可取值dark、light “background” : “#RRGGBB” //可选,字符串类型,#RRGGBB格式,系统状态栏背景颜色 }, 所有页面的uni.onKeyboardHeightChange都无法触发回调获取键盘高度 把这个statusbar设置全部去掉获取键盘高度事件就好使了


7 回复

刚才测试了,android 端,可以 监听高度变化,有附件你可以试试


好的 谢谢 我看下

你好 我看了你的设置是"app-plus" : { “launchwebview” : { //可选,JSON对象,应用首页相关配置,uni-app项目不建议手动修改 “statusbar” : { //可选,JSON对象,状态栏配置 “immersed” : “none”, “style” : “light”, //可选,字符串类型,系统状态栏样式(前景颜色),可取值dark、light “background” : “#RRGGBB” //可选,字符串类型,#RRGGBB格式,系统状态栏背景颜色 } } }这种 statusBar放在launchwebview里的 我的设置是这种 “app-plus” : { “statusbar” : { “immersed” : “none”, “style” : “light”, //可选,字符串类型,系统状态栏样式(前景颜色),可取值dark、light “background” : “#RRGGBB” //可选,字符串类型,#RRGGBB格式,系统状态栏背景颜色 }} 在app-plus下的 我切换成你那种写法可以监测高度了 但是项目里面的导航栏就错乱了 我用你demo改成我这种设置也无法监听了 导航栏也错乱了

回复 z***@fanciam.com: 你好,是要实现什么功能,也可以提供demo,我试试

回复 喜欢技术的前端: 谢谢大佬 功能的话已经重新实现了 就是聊天室键盘顶起输入框和聊天消息框 我改用uni.onWindowResize监听了 这个还能触发 以前还能顶起来 然后领导说有人反应输入的时候遮挡顶不起来 我看项目发现写的这个监听键盘高度的事件失效了 但是uni.onKeyboardHeightChange失效的原因我没找到 只知道把这个stausBar注了就行

回复 z***@fanciam.com: 好的,实现了就好,聊天这里输入框确实是个麻烦事,看你的描述应该也是获取键盘的高度,给输入框定位一样的高度

uni-app 中,如果你在 manifest.json 中配置了 statusbar 后,发现所有页面无法触发 uni.onKeyboardHeightChange 事件,可能是由于以下原因导致的:

可能的原因及解决方案

  1. statusbar 配置问题

    • 确保 manifest.json 中的 statusbar 配置正确,特别是 stylebackground 属性。
    • 如果 statusbar 配置不当,可能会导致页面布局或事件监听出现问题。
    {
      "app-plus": {
        "statusbar": {
          "style": "dark",
          "background": "#ffffff"
        }
      }
    }
  2. 键盘高度监听时机问题

    • 确保在页面加载时已经正确注册了 uni.onKeyboardHeightChange 事件监听器。可以在 onLoad 生命周期钩子中进行注册。
    export default {
      onLoad() {
        uni.onKeyboardHeightChange(res => {
          console.log('键盘高度变化:', res.height);
        });
      }
    }
  3. 页面布局问题

    • 如果页面布局中有某些元素(如 inputtextarea)被 statusbar 或其他元素遮挡,可能会导致键盘事件无法正常触发。检查页面布局,确保输入元素可见且可交互。
  4. 平台兼容性问题

    • uni.onKeyboardHeightChange 在不同平台上的行为可能有所不同。确保在目标平台上进行测试,并查阅相关平台的文档以了解可能存在的限制或差异。
  5. uni-app 版本问题

    • 确保你使用的是最新版本的 uni-app。旧版本可能存在一些已知的 bug 或兼容性问题。可以通过 npmHBuilderX 更新 uni-app
    npm update [@dcloudio](/user/dcloudio)/uni-app
  6. 调试与日志

    • 在代码中添加更多的日志输出,以便更好地理解事件触发的时机和状态。可以使用 console.loguni.showToast 等方法进行调试。
    uni.onKeyboardHeightChange(res => {
      console.log('键盘高度变化:', res.height);
      uni.showToast({
        title: `键盘高度: ${res.height}`,
        icon: 'none'
      });
    });
回到顶部
AI 助手
你好,我是IT营的 AI 助手
您可以尝试点击下方的快捷入口开启体验!