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的滚动计算仍基于键盘弹出前的文档高度,导致滚动位置偏移到键盘背后。
临时解决方案:
- 延迟执行滚动:在键盘弹出后稍作延迟再执行滚动
setTimeout(() => {
uni.pageScrollTo({
scrollTop: Number.MAX_VALUE,
duration: 300
});
}, 500);
- 监听键盘事件:在键盘完全弹出后再触发滚动
uni.onKeyboardHeightChange(res => {
if (res.height > 0) {
setTimeout(() => {
uni.pageScrollTo({
scrollTop: Number.MAX_VALUE,
duration: 300
});
}, 100);
}
});
- 手动计算位置:获取目标元素位置进行精确滚动
const query = uni.createSelectorQuery();
query.select('#target-element').boundingClientRect(rect => {
uni.pageScrollTo({
scrollTop: rect.bottom,
duration: 300
});
}).exec();

