uni-app IOS pageScrollTo 在软键盘弹出时页面高度计算有误,导致页面滚动不准确

uni-app IOS pageScrollTo 在软键盘弹出时页面高度计算有误,导致页面滚动不准确

开发环境 版本号 项目创建方式
Windows 11 HBuilderX

示例代码:

uni.pageScrollTo({ scrollTop:Number.MAX_VALUE, // Number.MAX_VALUE, duration: 1000, });


### 操作步骤:

页面上底部有个Fixed的输入框,这个时候外部有消息进来,触发滚动到底部功能

### 预期结果:

页面应该滚动到键盘上面

### 实际结果:

页面滚动到了键盘背后,挡住了内容

### bug描述:

uni.pageScrollTo 滚动,当页面中有键盘弹出状态的时候,滚动的位置不准确,会滚动到被软键盘覆盖的位置  
这个时候页面的高度计算有问题  
安卓没有问题,只有IOS有问题  
键盘弹出的时候,有时候也会弹出的高度不对

更多关于uni-app IOS pageScrollTo 在软键盘弹出时页面高度计算有误,导致页面滚动不准确的实战教程也可以访问 https://www.itying.com/category-93-b0.html

4 回复

附件是Demo 点击Input 输入框,弹出键盘之后,等待2秒,安卓将会滚动键盘之上,IOS会滚动到键盘背后

更多关于uni-app IOS pageScrollTo 在软键盘弹出时页面高度计算有误,导致页面滚动不准确的实战教程也可以访问 https://www.itying.com/category-93-b0.html


请问兄弟解决了吗?

我现在也是遇到这个问题

这是一个已知的iOS兼容性问题。当软键盘弹出时,iOS的窗口高度计算机制与Android不同,导致pageScrollTo滚动位置计算偏差。

问题原因: iOS软键盘弹出时,视口高度发生变化,但pageScrollTo的滚动计算仍基于键盘弹出前的文档高度,导致滚动位置偏移到键盘背后。

临时解决方案:

  1. 延迟执行滚动:在键盘弹出后稍作延迟再执行滚动
setTimeout(() => {
  uni.pageScrollTo({
    scrollTop: Number.MAX_VALUE,
    duration: 300
  });
}, 500);
  1. 监听键盘事件:在键盘完全弹出后再触发滚动
uni.onKeyboardHeightChange(res => {
  if (res.height > 0) {
    setTimeout(() => {
      uni.pageScrollTo({
        scrollTop: Number.MAX_VALUE,
        duration: 300
      });
    }, 100);
  }
});
  1. 手动计算位置:获取目标元素位置进行精确滚动
const query = uni.createSelectorQuery();
query.select('#target-element').boundingClientRect(rect => {
  uni.pageScrollTo({
    scrollTop: rect.bottom,
    duration: 300
  });
}).exec();
回到顶部