uni-app 报 Bug uni.onKeyboardHeightChange 中英文键盘切换时返回高度为0

uni-app 报 Bug uni.onKeyboardHeightChange 中英文键盘切换时返回高度为0

开发环境 版本号 项目创建方式
Windows 18363.1198 HBuilderX
### 示例代码:


uni.onKeyboardHeightChange(res => { console.log(res) })

### 操作步骤:


uni.onKeyboardHeightChange(res => { console.log(res) })

### 预期结果:

应该正常输出键盘高度,之前的版本是中英文切换时键盘高度不会变化,现在是变为0了,无法使用

### 实际结果:

```
16:40:58.045 [Object] {"height":307}  at pages/find/findMessage.vue:197
16:40:58.861 [Object] {"height":0}  at pages/find/findMessage.vue:197
16:41:01.414 [Object] {"height":346}  at pages/find/findMessage.vue:197
16:41:02.281 [Object] {"height":0}  at pages/find/findMessage.vue:197
16:41:02.312 [Object] {"height":307}  at pages/find/findMessage.vue:197
16:41:03.196 [Object] {"height":0}  at pages/find/findMessage.vue:197
16:41:04.052 [Object] {"height":307}  at pages/find/findMessage.vue:197
16:41:04.818 [Object] {"height":0}  at pages/find/findMessage.vue:197
```

### bug描述:

在进入页面的created生命周期中监听键盘高度,设置input输入框底部距离,做吸底效果,
单模式使用无异常,切换中英文格式时监听键盘高度为0,
附件中的视频是APP运行视频,图片时Hbuilder控制台输出日志
(页面配置:softinputMode 为 adjustResize)

更多关于uni-app 报 Bug uni.onKeyboardHeightChange 中英文键盘切换时返回高度为0的实战教程也可以访问 https://www.itying.com/category-93-b0.html

6 回复

用的什么输入法?使用的小米自带的搜狗测试没有发现此问题

更多关于uni-app 报 Bug uni.onKeyboardHeightChange 中英文键盘切换时返回高度为0的实战教程也可以访问 https://www.itying.com/category-93-b0.html


搜狗输入法。。。。。 好吧,切换回小米输入法后就正常了。。。兼容性问题?

回复 zhangyq: 个别输入法有兼容性问题,出现问题的是什么输入法?

回复 DCloud_UNI_LXH: 搜狗输入法

回复 DCloud_UNI_LXH: 之前用的是搜狗输入法,有问题 现在切换搜狗输入法小米版后正常

这是一个已知的 uni-app 键盘高度监听问题。在 Android 平台上,当输入法切换中英文模式时,系统会先收起当前键盘再弹出新键盘,导致 uni.onKeyboardHeightChange 监听到短暂的高度为0的情况。

从你的日志可以看出,键盘高度在 307 和 346 之间正常变化,但切换过程中出现了高度为0的瞬时状态。这是由于:

  1. 键盘切换时系统会先触发键盘收起事件(height: 0)
  2. 然后立即触发新键盘弹出事件(height: 新高度)

对于需要做输入框吸底效果的场景,建议在代码中加入防抖处理:

let keyboardTimer = null
uni.onKeyboardHeightChange(res => {
    clearTimeout(keyboardTimer)
    if (res.height === 0) {
        // 如果是高度为0,延迟判断是否为真正的键盘收起
        keyboardTimer = setTimeout(() => {
            console.log('键盘已收起')
            // 处理键盘收起逻辑
        }, 100)
    } else {
        console.log('键盘高度:', res.height)
        // 处理键盘弹出逻辑
    }
})
回到顶部