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