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

11 回复

键盘是如何触发的?

更多关于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系统对键盘动画事件的处理机制发生了变化,导致键盘过渡动画的每个中间状态都会触发监听回调。

临时解决方案

  1. 使用防抖函数控制触发频率:
let timer = null
uni.onKeyboardHeightChange(res => {
  clearTimeout(timer)
  timer = setTimeout(() => {
    if(res.height > 0) {
      console.log('键盘高度:', res.height)
    } else {
      console.log('键盘已收起')
    }
  }, 100)
})
  1. 记录上一次的有效高度进行过滤:
let lastHeight = -1
uni.onKeyboardHeightChange(res => {
  if(res.height !== lastHeight) {
    lastHeight = res.height
    console.log('键盘高度变化:', res.height)
  }
})
回到顶部