uni-app uni.onKeyboardHeightChange
uni-app uni.onKeyboardHeightChange
| 开发环境 | 版本号 | 项目创建方式 |
|---|---|---|
| Windows | 11 | HBuilderX |
产品分类:uniapp/App
PC开发环境操作系统:Windows
HBuilderX类型:正式
HBuilderX版本号:4.76
手机系统:iOS
手机系统版本号:iOS 19
手机厂商:苹果
手机机型:iPhone11
页面类型:vue
vue版本:vue2
打包方式:云端
操作步骤:
uni.onKeyboardHeightChange(res => {
console.log(res.height)
})
预期结果:
uni.onKeyboardHeightChange(res => {
console.log(res.height)
})
实际结果:
uni.onKeyboardHeightChange(res => {
console.log(res.height)
})
bug描述:
上面选错了,用到时iOS26,uni.onKeyboardHeightChange的高度监听不正常,一次高度变化会响应2-3此,最后一次高度变化不管是打开还是关闭都是0
更多关于uni-app uni.onKeyboardHeightChange的实战教程也可以访问 https://www.itying.com/category-93-b0.html
键盘是如何触发的?
更多关于uni-app uni.onKeyboardHeightChange的实战教程也可以访问 https://www.itying.com/category-93-b0.html
点击的textarea 旧版本正常
显示和隐藏都是多次触发高度变化,好像是400多,44,0和400多,0 这两组数据变化
打开键盘 11:20:26.696 [Number] 422 at pages/chat/chat.vue:543 11:20:26.696 [Number] 44 at pages/chat/chat.vue:543 11:20:26.696 [Number] 0 at pages/chat/chat.vue:543
关闭键盘 11:20:45.944 [Number] 422 at pages/chat/chat.vue:543 11:20:45.945 [Number] 0 at pages/chat/chat.vue:543
回复 6***@qq.com: 我这里没有出现这个情况,是只有 26 才能复现吗?
回复 DCloud_UNI_yuhe: 设备已经降级了,iPhone11 降级之后是正常的,目前只有这一部手机测试过不正常
回复 DCloud_UNI_yuhe: 系统升级到26后,出现问题
回复 DCloud_UNI_yuhe: 线上产品,用户量较多,希望能尽快解决,感谢!
同 iOS 26。更新前稳定可以获取到正常的高度。更新后应用在第一次调用该接口时高度在 100px 左右,明显低于正常的 400+ 值。同事未升级的设备表现正常。
在iOS 26系统上,uni.onKeyboardHeightChange确实存在高度变化多次触发的问题,这是已知的兼容性问题。当键盘展开或收起时,系统会连续触发多次高度变化事件,最后一次事件的高度值固定为0。
问题原因:iOS 26系统对键盘动画事件的处理机制发生了变化,导致键盘过渡动画的每个中间状态都会触发监听回调。
临时解决方案:
- 使用防抖函数控制触发频率:
let timer = null
uni.onKeyboardHeightChange(res => {
clearTimeout(timer)
timer = setTimeout(() => {
if(res.height > 0) {
console.log('键盘高度:', res.height)
} else {
console.log('键盘已收起')
}
}, 100)
})
- 记录上一次的有效高度进行过滤:
let lastHeight = -1
uni.onKeyboardHeightChange(res => {
if(res.height !== lastHeight) {
lastHeight = res.height
console.log('键盘高度变化:', res.height)
}
})

