uni-app ios 横屏之后界面只会出现一半的情况

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

uni-app ios 横屏之后界面只会出现一半的情况

开发环境 版本号 项目创建方式
Mac 13.0 HBuilderX
iOS iOS 17
苹果
15pro

操作步骤:

ios 手机 屏幕锁定未开启,进入app,将手机横过来后

预期结果:

不该一半

实际结果:

出现一半的情况

bug描述:

ios 手机 屏幕锁定未开启,进入app,将手机横过来后,只显示一半

image


9 回复

有些nvue切换横竖屏是可能导致样式出现问题,上面是图片还是视频?


视频 我运行到ios基座 标准模式下没问题,自定义基座有问题

回复 码奴是我: nvue 切换横竖屏时可能导致样式出现问题,建议有 nvue 的页面锁定手机方向。

回复 HRK_01: 那如何锁定呢,使用了 plus.screen.lockOrientation(“portrait-primary”); 安卓生效 ios不行

回复 码奴是我: 我刚刚测试了一下IOS可以生效,是不是之前锁定过屏幕?先执行unlock再lock还会复现吗

回复 HRK_01: 先执行unlock再lock还是会复现 您是云打包之后 正常的?

回复 码奴是我: 能否发一个精简复现问题的工程zip附件,我排查一下看看

解决了吗,

uni-app 中,iOS 设备横屏后界面只显示一半的问题,通常是由于页面布局或样式没有正确适配横屏模式导致的。以下是一些可能的原因和解决方案:


1. 检查页面布局是否支持横屏

确保页面布局能够自适应屏幕宽度和高度。可以使用 flex 布局或百分比宽度来确保内容在横屏模式下正常显示。

.container {
  display: flex;
  flex-direction: column;
  width: 100%;
  height: 100%;
}

2. 设置 viewport 标签

pages.json 或页面的 <template> 中,确保 viewport 标签正确设置,以支持横屏模式。

<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no, viewport-fit=cover">

注意:viewport-fit=cover 可以确保页面内容覆盖整个屏幕。


3. 使用 uni.getSystemInfo 动态调整布局

通过 uni.getSystemInfo 获取设备的屏幕宽度和高度,动态调整布局。

uni.getSystemInfo({
  success(res) {
    const screenWidth = res.screenWidth;
    const screenHeight = res.screenHeight;
    console.log('屏幕宽度:', screenWidth, '屏幕高度:', screenHeight);
    // 根据屏幕尺寸动态调整布局
  }
});

4. 检查 pages.json 中的横屏配置

pages.json 中,确保页面的 orientation 设置为 autolandscape,以支持横屏模式。

{
  "pages": [
    {
      "path": "pages/index/index",
      "style": {
        "navigationBarTitleText": "首页",
        "pageOrientation": "auto" // 支持自动横竖屏切换
      }
    }
  ]
}

5. 处理横屏事件

在页面中监听横屏事件,动态调整布局。

onLoad() {
  uni.onWindowResize((res) => {
    const { windowWidth, windowHeight } = res.size;
    console.log('屏幕宽度:', windowWidth, '屏幕高度:', windowHeight);
    // 根据屏幕尺寸动态调整布局
  });
}

6. 检查样式问题

确保页面样式没有固定宽度或高度,导致横屏模式下内容被截断。例如:

/* 错误示例 */
.page {
  width: 375px; /* 固定宽度 */
  height: 667px; /* 固定高度 */
}

/* 正确示例 */
.page {
  width: 100%;
  height: 100%;
}

7. iOS 安全区域适配

在横屏模式下,iOS 设备的安全区域(如刘海屏)可能会导致内容被遮挡。可以使用 env(safe-area-inset-*) 来处理安全区域。

.container {
  padding-top: env(safe-area-inset-top);
  padding-bottom: env(safe-area-inset-bottom);
  padding-left: env(safe-area-inset-left);
  padding-right: env(safe-area-inset-right);
}
回到顶部
AI 助手
你好,我是IT营的 AI 助手
您可以尝试点击下方的快捷入口开启体验!