uni-app input @focus 事件第一次获取高度不准确

uni-app input @focus 事件第一次获取高度不准确

开发环境 版本号 项目创建方式
Mac 10.15.5 HBuilderX

操作步骤:

  1. 启动app
  2. 点击输入框,取的值是119
  3. 输入框失去焦点,再点击输入框,取的值是411
  4. 以后无论点击多少次输入框,取的都是411

预期结果:

取的值是411

实际结果:

app启动后第一次取的值是119

bug描述:

<input [@focus](/user/focus)="test" :adjust-position="false" />  

test: function(e) {  
  console.log(e.detail.height);  
}

test方法第一次获取到的数值是119,之后再触发获取的就是正常值411,正常就应该是411,只是在app第一次启动后,获取的值是119,跳转到其他页面,再回到这个页面,取的值一直是411。问题就是出在第一次启动app


更多关于uni-app input @focus 事件第一次获取高度不准确的实战教程也可以访问 https://www.itying.com/category-93-b0.html

4 回复

你好,反馈的是 nvue 页面,但是示例里面提供的是 vue , 使用提供的示例工程无论是vue还是nvue都没有复现问题,每次返回的高度都是一样的那。。。

更多关于uni-app input @focus 事件第一次获取高度不准确的实战教程也可以访问 https://www.itying.com/category-93-b0.html


你试试搜狗输入法,是不是输入法的问题

我测的是vue和nvue都有问题

这是一个已知的uni-app平台差异问题,在App端首次触发@focus事件时,键盘高度计算可能不准确。建议通过以下方式解决:

  1. 使用uni.onKeyboardHeightChange监听键盘高度变化:
onLoad() {
  uni.onKeyboardHeightChange(res => {
    this.keyboardHeight = res.height
  })
}
  1. 添加延迟处理:
test: function(e) {
  setTimeout(() => {
    console.log(e.detail.height)
  }, 100)
}
  1. 使用数据缓存记录正确高度:
test: function(e) {
  if(e.detail.height < 200) return // 过滤异常值
  uni.setStorageSync('keyboardHeight', e.detail.height)
}
回到顶部