uni-app ios键盘收起后页面消失

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

uni-app ios键盘收起后页面消失

操作步骤:

  • 点击上面获取焦点,收起键盘后,页面消失

预期结果:

  • 页面正常显示,底部栏在页面最下方

实际结果:

  • 页面消失

bug描述:

  • ios键盘收起后页面消失,安卓正常显示
信息类别 详细信息
产品分类 uniapp/App
PC开发环境 Windows
PC版本号 Windows 11 企业版
HBuilderX 正式
HBuilderX版本 3.97
手机系统 iOS
手机版本号 iOS 16
手机厂商 苹果
手机机型 iphone12
页面类型 vue
vue版本 vue2
打包方式 云端
项目创建方式 HBuilderX

Image 1 Image 2 Image 3


2 回复

图片的顺序是2-3-1


在使用 uni-app 开发 iOS 应用时,可能会遇到键盘收起后页面内容消失或布局错乱的问题。这通常是由于 iOS 系统在处理键盘弹出和收起时,对页面布局的调整导致的。以下是一些常见的解决方案:

1. 使用 page.json 配置

page.json 中,可以通过配置 "softinputMode": "adjustResize" 来调整键盘弹出时的页面布局。

{
  "pages": [
    {
      "path": "pages/index/index",
      "style": {
        "navigationBarTitleText": "首页",
        "softinputMode": "adjustResize"
      }
    }
  ]
}

2. 使用 uni.onKeyboardHeightChange 监听键盘高度变化

通过监听键盘高度的变化,手动调整页面布局。

uni.onKeyboardHeightChange(res => {
  const keyboardHeight = res.height;
  if (keyboardHeight > 0) {
    // 键盘弹出时,调整页面布局
  } else {
    // 键盘收起时,恢复页面布局
  }
});

3. 使用 scroll-view 包裹页面内容

将页面内容包裹在 scroll-view 中,可以避免键盘弹出时页面内容被挤压或消失。

<scroll-view scroll-y="true" style="height: 100vh;">
  <!-- 页面内容 -->
</scroll-view>

4. 使用 uni.setNavigationBarTitle 动态设置导航栏标题

在某些情况下,键盘收起后页面内容消失可能与导航栏的布局调整有关。可以通过动态设置导航栏标题来避免这个问题。

uni.setNavigationBarTitle({
  title: '页面标题'
});

5. 使用 uni.pageScrollTo 滚动页面

在键盘收起后,手动滚动页面到指定位置,确保页面内容可见。

uni.pageScrollTo({
  scrollTop: 0,
  duration: 300
});

6. 使用 uni.hideKeyboard 手动隐藏键盘

在某些情况下,手动隐藏键盘可以避免页面布局错乱。

uni.hideKeyboard();

7. 使用 uni.getSystemInfo 获取系统信息

通过获取系统信息,了解当前设备的屏幕高度和键盘高度,从而调整页面布局。

uni.getSystemInfo({
  success(res) {
    const screenHeight = res.screenHeight;
    const windowHeight = res.windowHeight;
    const keyboardHeight = screenHeight - windowHeight;
    // 根据键盘高度调整页面布局
  }
});

8. 使用 uni.createSelectorQuery 获取元素位置

通过获取页面元素的位置信息,手动调整页面布局。

const query = uni.createSelectorQuery().in(this);
query.select('#elementId').boundingClientRect(data => {
  const elementTop = data.top;
  // 根据元素位置调整页面布局
}).exec();

9. 使用 uni.setStorageSync 保存页面状态

在键盘弹出时保存页面状态,键盘收起时恢复页面状态。

uni.setStorageSync('pageState', { scrollTop: 100 });
const pageState = uni.getStorageSync('pageState');

10. 使用 uni.reLaunch 重新加载页面

在极端情况下,可以通过重新加载页面来恢复页面布局。

uni.reLaunch({
  url: '/pages/index/index'
});
回到顶部
AI 助手
你好,我是IT营的 AI 助手
您可以尝试点击下方的快捷入口开启体验!