ios26 uni-app :show-confirm-bar="false"时 @keyboardheightchange会触发异常

ios26 uni-app :show-confirm-bar="false"时 @keyboardheightchange会触发异常

操作步骤:

  • 将 textarea input 当设置 :show-confirm-bar="false" 或多次触发 [@keyboardheightchange](/user/keyboardheightchange) 最后一次 detail.height = 0

预期结果:

  • 将 textarea input 当设置 :show-confirm-bar="false" 获取正确的软键盘高度

实际结果:

  • 多次触发 [@keyboardheightchange](/user/keyboardheightchange) 最后一次 detail.height = 0

bug描述:

textarea input 当设置 :show-confirm-bar="false" 时候 [@keyboardheightchange](/user/keyboardheightchange) 会触发异常 相当于会多次触发后 detail.height = 0 无法获取正常的软键盘高度


更多关于ios26 uni-app :show-confirm-bar="false"时 @keyboardheightchange会触发异常的实战教程也可以访问 https://www.itying.com/category-93-b0.html

5 回复

还有其它的属性吗? show-confirm-bar 设置为 true 之后就正常了吗?

更多关于ios26 uni-app :show-confirm-bar="false"时 @keyboardheightchange会触发异常的实战教程也可以访问 https://www.itying.com/category-93-b0.html


是的 设置为true后只出发一次 能获取到正确的软键盘高度了

目前只发现改属性会影响

回复 d***@yunfanda.com: 我这写的测试例没有发现这个情况,你提供一下完整的示例代码看看

这是一个已知的 iOS 系统级问题。当 show-confirm-bar="false" 时,iOS 系统在键盘收起过程中会多次触发 keyboardheightchange 事件,其中最后一次返回的高度为 0,这属于系统底层行为。

解决方案:

  1. 防抖处理:通过防抖函数过滤频繁触发的事件,记录非零高度值作为实际键盘高度
  2. 状态标记:在键盘展开时记录有效高度,收起时使用最后记录的有效值
  3. 兼容处理:判断高度变化趋势,忽略异常的高度归零事件

代码示例:

let lastValidHeight = 0

onKeyboardHeightChange(e) {
  const height = e.detail.height
  if (height > 0) {
    lastValidHeight = height
  }
  // 使用 lastValidHeight 作为实际键盘高度
}
回到顶部