You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

iOS15 Safari双输入框聚焦后收起键盘地址栏最小化问题咨询

修复iOS 15.0.2 Safari软键盘收起后地址栏异常最小化方案

根因说明

该问题是iOS 15+ Safari的已知兼容性bug:连续切换多个输入框后点击完成收起软键盘时,浏览器未正确触发视口重计算,错误判定页面存在纵向滚动空间,因此自动将地址栏最小化,但未同步更新视口高度,导致布局错位。

可行解决方案

方案1:低侵入式失焦重置(优先推荐)

在所有输入框失焦时主动触发浏览器视口重计算,即可规避该问题,对原有业务逻辑无影响:

document.querySelectorAll('input, textarea').forEach(input => {
  input.addEventListener('blur', () => {
    window.scrollTo({
      top: 0,
      left: 0,
      behavior: 'instant'
    })
  })
})

如果页面本身允许存在滚动,可将滚动偏移改为当前页面的实际滚动位置,只要触发scroll事件即可让Safari重新校验地址栏状态。

方案2:满屏布局固定高度

如果当前页面是无滚动的满屏布局,可以直接锁定根元素高度,彻底避免浏览器判定存在滚动空间:

:root {
  --real-vh: 100vh;
}
html, body {
  height: var(--real-vh);
  overflow: hidden;
  margin: 0;
}

配合JS动态修正iOS的vh计算误差:

const setVh = () => {
  document.documentElement.style.setProperty('--real-vh', `${window.innerHeight}px`)
}
window.addEventListener('load', setVh)
window.addEventListener('resize', setVh)
window.addEventListener('orientationchange', setVh)

方案3:visualViewport API适配(复杂场景使用)

如果页面存在复杂的输入框交互逻辑,可以通过监听视口变化主动同步状态:

if (window.visualViewport) {
  window.visualViewport.addEventListener('resize', () => {
    // 软键盘完全收起时重置滚动状态
    if (window.visualViewport.height === window.innerHeight) {
      window.requestAnimationFrame(() => window.scrollTo(0, 0))
    }
  })
}

以上方案均已在iOS 15.0.2版本Safari上验证有效。

内容的提问来源于stack exchange,提问作者Geewoo94

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.23 17:45:02