uni-app 【报Bug】manifest.json 配置statusbar后 所有页面无法触发uni.onKeyboardHeightChange 获取不到键盘高度
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设置全部去掉获取键盘高度事件就好使了
刚才测试了,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
事件,可能是由于以下原因导致的:
可能的原因及解决方案
-
statusbar
配置问题:- 确保
manifest.json
中的statusbar
配置正确,特别是style
和background
属性。 - 如果
statusbar
配置不当,可能会导致页面布局或事件监听出现问题。
{ "app-plus": { "statusbar": { "style": "dark", "background": "#ffffff" } } }
- 确保
-
键盘高度监听时机问题:
- 确保在页面加载时已经正确注册了
uni.onKeyboardHeightChange
事件监听器。可以在onLoad
生命周期钩子中进行注册。
export default { onLoad() { uni.onKeyboardHeightChange(res => { console.log('键盘高度变化:', res.height); }); } }
- 确保在页面加载时已经正确注册了
-
页面布局问题:
- 如果页面布局中有某些元素(如
input
或textarea
)被statusbar
或其他元素遮挡,可能会导致键盘事件无法正常触发。检查页面布局,确保输入元素可见且可交互。
- 如果页面布局中有某些元素(如
-
平台兼容性问题:
uni.onKeyboardHeightChange
在不同平台上的行为可能有所不同。确保在目标平台上进行测试,并查阅相关平台的文档以了解可能存在的限制或差异。
-
uni-app
版本问题:- 确保你使用的是最新版本的
uni-app
。旧版本可能存在一些已知的 bug 或兼容性问题。可以通过npm
或HBuilderX
更新uni-app
。
npm update [@dcloudio](/user/dcloudio)/uni-app
- 确保你使用的是最新版本的
-
调试与日志:
- 在代码中添加更多的日志输出,以便更好地理解事件触发的时机和状态。可以使用
console.log
或uni.showToast
等方法进行调试。
uni.onKeyboardHeightChange(res => { console.log('键盘高度变化:', res.height); uni.showToast({ title: `键盘高度: ${res.height}`, icon: 'none' }); });
- 在代码中添加更多的日志输出,以便更好地理解事件触发的时机和状态。可以使用