uni-app input 弹出键盘获取键盘高度时,在底部有虚拟键位的情况下出现异常。上面的输入框无法贴近键盘

uni-app input 弹出键盘获取键盘高度时,在底部有虚拟键位的情况下出现异常。上面的输入框无法贴近键盘

操作步骤:

  • 点击input 输入框

预期结果:

  • 希望输入框能贴近键盘

实际结果:

  • 输入框与键盘中间有一段距离,而这段距离的高度正好是底部虚拟键位的高度

bug描述:

UNIAPP input 弹出键盘 获取键盘高度,在底部有虚拟键位的时候 出现异常。上面的输入框无法贴近键盘,上面输入框的离底高度 是根据键盘的高度来设置的,中间出现了一段空白,而这段空白 正好是底部键位的高度

信息类别 信息内容
产品分类 uniapp/App
PC开发环境 Windows
PC版本号 3.0.5.20210107
HBuilderX类型 正式
HBuilderX版本 3.0.5
手机系统 Android
手机系统版本 Android 10
手机厂商 OPPO
手机机型 PBCM10
页面类型 vue
打包方式 云端
项目创建方式 HBuilderX


更多关于uni-app input 弹出键盘获取键盘高度时,在底部有虚拟键位的情况下出现异常。上面的输入框无法贴近键盘的实战教程也可以访问 https://www.itying.com/category-93-b0.html

27 回复

升级HX3.1.2试下

更多关于uni-app input 弹出键盘获取键盘高度时,在底部有虚拟键位的情况下出现异常。上面的输入框无法贴近键盘的实战教程也可以访问 https://www.itying.com/category-93-b0.html


更新到最新版本后,键盘高度都不能获取了

回复 全栈工程师: 是HX3.1.2吗 提供完整测试项目我们测试下

回复 DCloud_Android_ST: 是的

回复 全栈工程师: 嗯提供下示例 和复现步骤

回复 DCloud_Android_ST: 我发现问题的所在了,是我在input上加了adjust-position=“false” 这个属性后 就获取不了键盘高度了,但是这个属性我需要

在NVUE页面上 弹出键盘,高度为0

没能复现。请提供完整示例

回复 DCloud_Android_ST: 已经上传了代码,您试试看

回复 全栈工程师: 问题已确认 会尽快修复

回复 DCloud_Android_ST: 好的,项目着急上线,大概什么时候能修复呢

回复 全栈工程师: 用了你的示例看只打印了log但并未设置页面高度所以无法确定你的问题 我确认的是触发两次focus事件 第一次0

回复 DCloud_Android_ST: 如何操作重现?我试了试未出现该问题。

回复 DCloud_Android_ST: input上增加 adjust-position=“false” 这个属性 就获取不了键盘的高度,高度获取一直为0,但是去掉这个属性,就可以获取

回复 DCloud_Android_ST: input上增加 adjust-position="false"这个属性后,不管触发几次,键盘高度都为0

回复 DCloud_Android_ST: 增加adjust-position=“false” 你再试试,看键盘获取是不是都是0

示例代码

已测,最新HBuilder X3.1.2 以及编译器版本3.1.2下未出现


在 input 上 加adjust-position=“false” 这个 就不会获取键盘高度

回复 全栈工程师: 这个加了不就是关闭input随键盘上移功能吗?这就不是标题图片描述的bug了吧?

回复 996上班族: 之前的版本是支持的。因为功能要求,所以在弹出键盘后可以获取键盘的高度,然后再将键盘的高度赋值给input的bottom,这样的画,input就在键盘之上了。现在的问题是:HX更新到3.1.2后,键盘高度无法获取了造成了BUG

回复 全栈工程师: 试了试应该是整体传参的e出了问题吧,我看e.target or e.detail 等里面的属性都是空or0,刚看到有个bug报的是e.target.dateset为空对象的。

回复 996上班族: 对的,就是这次HX升级后 获取不了键盘的任何属性了

HX3.1.3已修复

好的,期待更新

HBuilder已经是3.1.8,但是事件参数e只有value,没有height

这是Android系统虚拟导航栏导致的常见问题。在uni-app中,可以通过以下方式解决:

  1. 使用uni.onKeyboardHeightChange监听键盘高度变化,但需要手动处理虚拟导航栏高度:
uni.onKeyboardHeightChange(res => {
    // 获取实际键盘高度
    const keyboardHeight = res.height;
    // 计算虚拟导航栏高度
    const navigationBarHeight = window.innerHeight - document.documentElement.clientHeight;
    // 最终高度 = 键盘高度 - 虚拟导航栏高度
    const finalHeight = keyboardHeight - navigationBarHeight;
    // 设置输入框位置
    this.keyboardHeight = finalHeight;
})
  1. 或者使用CSS调整:
/* 在manifest.json中配置 */
"app-plus": {
    "softinputMode": "adjustResize"
}
  1. 也可以尝试在页面onLoad时获取安全区域:
onLoad() {
    this.safeArea = uni.getSystemInfoSync().safeAreaInsets.bottom;
}
回到顶部