在 IOS 26中 uni-app 点击输入框后 fixed会失效

在 IOS 26中 uni-app 点击输入框后 fixed会失效

开发环境 版本号 项目创建方式
Mac macOS Tahoe 26.0.1 HBuilderX

操作步骤:

  • 目前测试机仅测试了 iPhone12 以上的(iPhone 以下微测试)
  • 先滚动页面,fixed 定位正常,再点击输入框, fixed 定位异常

预期结果:

  • 两次都应该正常

实际结果:

  • 先滚动页面,fixed 定位正常,再点击输入框, fixed 定位异常

bug描述:

  • 在 IOS 26中,底部导航使用 fixed 做自定义导航在底部,页面内有一个 input 框,开始时页面正常滚动时,fixed 没有问题,当点击页面 input 后,再收起键盘,底部导航就会跟着页面滚动了

testIOS26.zip


更多关于在 IOS 26中 uni-app 点击输入框后 fixed会失效的实战教程也可以访问 https://www.itying.com/category-93-b0.html

15 回复

附件中是最小可复现案例

更多关于在 IOS 26中 uni-app 点击输入框后 fixed会失效的实战教程也可以访问 https://www.itying.com/category-93-b0.html


参考这个 https://ask.dcloud.net.cn/question/213981 看你描述是同一个问题, fixed+input 导致的问题,是 Safari 的 bug

我这个是 APP,APP 也是这个问题吗

回复 early_Summer: 对,苹果改动了 webview 的一些 css 规则

回复 DCloud_UNI_OttoJi: 好的

回复 early_Summer: 等 26.1 推送,苹果修复了这个 bug,这个目前没有绕过方案,需要等苹果修复。

ios17和18正常没问题,但是ios26就有和作者一样的问题.是还没兼容ios26吗

等 26.1 推送,苹果修复了这个 bug,这个目前没有绕过方案,需要等苹果修复。

那现在有没有什么临时解决方案呢

看描述苹果 26.1 已经修复了,后续会推送。这个问题是渲染引擎底层出现了问题,目前没有绕过方案,需要等苹果修复。

回复 DCloud_UNI_OttoJi: 您好,方便指导下一个问题吗?为什么ios26搜不到安卓设备发出的ibeacon信号,其它ios版本能搜到,而且ios26能搜到ios设备发出的ibeacon信号

回复 我愿你知道: 如果相同的代码产物,在低版本的 iPhone 上正常,高版本的 iPhone 上不正常,可能是 iPhone 的 bug,你可可参考 UTS 插件介绍 和 原生混编 编写 swift 原生代码进行处理,看是否是原生代码也有问题,也可在插件市场搜索。 如果你认为是 Uniapp 的bug,请单独开贴,按照 bug 反馈填写。

回复 DCloud_UNI_OttoJi: 不是uniapp的bug,我两台iPhone设备都装了第三方专门测试ibeacon的应用。但就是Iphone17搜不到,iPhone14能搜到,而且两台iPhone的iOS版本都是26.0.1。查了一个星期,什么资料都查不到。真没头绪了

回复 DCloud_UNI_OttoJi: 我提了个求助贴。 https://ask.dcloud.net.cn/question/214791

这是一个已知的 iOS 26 系统兼容性问题。当软键盘弹出时,iOS 会重新计算视口高度,导致 fixed 定位元素失效。

解决方案:

  1. 使用 CSS 替代方案

    .fixed-bottom {
      position: sticky;
      bottom: 0;
      width: 100%;
    }
    
  2. 监听键盘事件

    // 键盘弹出时
    uni.onKeyboardHeightChange(res => {
      if (res.height > 0) {
        // 键盘弹出,临时调整布局
      } else {
        // 键盘收起,恢复布局
      }
    })
    
  3. 使用页面滚动替代全局滚动 在页面配置中设置:

    {
      "style": {
        "navigationBarTitleText": "",
        "enablePullDownRefresh": false,
        "pageOrientation": "auto",
        "disableScroll": true
      }
    }
    
  4. 临时修复方案 在 input 的 @blur 事件中强制刷新布局:

    onBlur() {
      setTimeout(() => {
        window.scrollTo(0, 0)
      }, 100)
    }
回到顶部