uni-app 原生子窗体配合web-view使用问题:当web-view中的输入框弹出底部键盘时,原生子窗体消失

发布于 1周前 作者 phonegap100 来自 Uni-App

uni-app 原生子窗体配合web-view使用问题:当web-view中的输入框弹出底部键盘时,原生子窗体消失

操作步骤:

  • web-view中的输入框点击调出底部的输入键盘,键盘关闭后原生子窗体不见了

预期结果:

  • 原生子窗体依然在的

实际结果:

  • 原生子窗体不见,使用的是dock方法放在底部

bug描述:

  • 原生子窗体,配合web-view使用,当web-view中的输入框弹出调起底部键盘时,原生子窗体居然消失了!(安桌条件下)

| 信息类别         | 信息内容                   |
|------------------|----------------------------|
| 产品分类         | uniapp/App                 |
| PC开发环境       | Windows                    |
| PC开发环境版本   | 1                          |
| HBuilderX类型    | 正式                       |
| HBuilderX版本    | 3.8.12                     |
| 手机系统         | Android                    |
| 手机系统版本     | Android 11                 |
| 手机厂商         | 华为                       |
| 手机机型         | 1                          |
| 页面类型         | vue                        |
| vue版本          | vue2                       |
| 打包方式         | 云端                       |
| 项目创建方式     | HBuilderX                  |

1 回复

uni-app 中,当使用原生子窗体(如 subNVue)与 web-view 组件结合时,可能会遇到在 web-view 中输入框弹出键盘时,原生子窗体消失的问题。这是因为在 iOS 和 Android 平台上,键盘弹出时会触发页面的布局变化,导致原生子窗体被重新布局或隐藏。

解决方案

1. 使用 subNVueposition 属性

通过设置 subNVueposition 属性为 staticabsolute,可以避免子窗体在键盘弹出时被重新布局。

{
  "pages": [
    {
      "path": "pages/index/index",
      "style": {
        "subNVue": [
          {
            "id": "mySubNVue",
            "path": "pages/subNVue/subNVue",
            "position": "absolute", // 或者 "static"
            "style": {
              "width": "100%",
              "height": "100%",
              "background": "transparent"
            }
          }
        ]
      }
    }
  ]
}

2. 监听键盘事件并调整子窗体位置

通过监听键盘的弹出和收起事件,动态调整子窗体的位置,确保它不会被键盘遮挡或隐藏。

uni.onKeyboardHeightChange(res => {
  const keyboardHeight = res.height;
  if (keyboardHeight > 0) {
    // 键盘弹出时,调整子窗体的位置
    const subNVue = uni.getSubNVueById('mySubNVue');
    subNVue.setStyle({
      bottom: keyboardHeight + 'px'
    });
  } else {
    // 键盘收起时,恢复子窗体的位置
    const subNVue = uni.getSubNVueById('mySubNVue');
    subNVue.setStyle({
      bottom: '0px'
    });
  }
});

3. 使用 web-viewadjust-position 属性

web-view 组件中,设置 adjust-position 属性为 false,可以防止页面在键盘弹出时自动调整位置。

<web-view src="https://example.com" :adjust-position="false"></web-view>

4. 使用 input 组件的 adjust-position 属性

如果 web-view 中的输入框是原生 input 组件,可以设置 adjust-position 属性为 false,防止页面在键盘弹出时自动调整位置。

<input type="text" :adjust-position="false" />
回到顶部
AI 助手
你好,我是IT营的 AI 助手
您可以尝试点击下方的快捷入口开启体验!