h***@126.com
h***@126.com
  • 发布:2026-05-11 15:51
  • 更新:2026-05-11 15:54
  • 阅读:21

【报Bug】横屏应用在ios26系统rpx计算错误

分类:uni-app

产品分类: uniapp/App

PC开发环境操作系统: Windows

PC开发环境操作系统版本号: win64

HBuilderX类型: 正式

HBuilderX版本号: 5.07

手机系统: iOS

手机系统版本号: iOS 26

手机厂商: 苹果

手机机型: 苹果15.13,xr

页面类型: vue

vue版本: vue2

打包方式: 云端

项目创建方式: HBuilderX

示例代码:
plus.screen.lockOrientation('landscape-primary');  
"globalStyle": {  
    "app-plus": {  
        "immersed": true, // 开启页面沉浸式  
        "safearea": {  
            "bottom": {  
                "offset": "auto" // 自动适配底部安全区  
            }  
        },  
        "bounce": "none", // 关闭页面回弹效果  
        "statusbar": {  
            "hidden": true // 隐藏状态栏  
        }  

    },  
    "navigationBarTextStyle": "black",  
    "navigationBarTitleText": "标题",  
    "navigationBarBackgroundColor": "#FFFFFF",  
    "backgroundColor": "#F8F8F8",  
    "navigationStyle": "custom",  
    "pageOrientation": "landscape", // 关键配置:设置为横屏  
    "rpxCalcMaxDeviceWidth": 2048,  
    "rpxCalcBaseDeviceWidth": 2048,  
    "rpxCalcIncludeWidth": 750,  
    "dynamicRpx": false // 关键修改点  
},

操作步骤:

云宫福境 app,

预期结果:

样式显示正常,如附件三

实际结果:

rpx计算错误,如附件1,2.

bug描述:

在ios26一下系统全局横屏正常,26系统横屏读取错误

2026-05-11 15:51 负责人:无 分享
已邀请:
Ask小助手

Ask小助手 - Ask社区AI助手

欢迎到专业群( uni-app 官方技术交流群 1 ) 咨询,群中有相关专业的管理员和群友。

作为DCloud官方人员,我对这份bug反馈进行了评审,具体如下:

1. 反馈内容完整性评价

这份反馈的整体质量中等,核心问题描述清晰,但部分细节有待补充。

  • BUG描述:描述较为直白,点明了“iOS 26系统下横屏rpx计算错误”、“其他系统正常”这一关键差异。但可以进一步补充错误的具体表现,例如是rpx整体计算偏大、偏小,还是部分元素异常。
  • 代码示例:提供的配置片段非常关键,直接展示了你的配置方案,对于定位问题很有帮助。但这不是一个完整的、可直接运行的工程。一个更理想的示例应该是一个极简的demo,包含一个使用rpx布局的简单页面和pages.json配置,这样官方可以“零成本”复现问题。
  • 复现步骤:当前的“云宫福境 app”不是一个有效的复现步骤。官方人员无法获知这是一个什么样的应用,也无法据此复现。你需要提供基于一个最小化demo的、具体到每一步点击操作的复现路径。
  • 预期结果与实际结果:描述清晰,且配合了附件截图,对比明确。实际结果“rpx计算错误”是合理的bug表现,初步判断不是误报。
  • 分类信息:信息基本完整,提供了开发环境、HBuilderX版本、手机系统与设备型号、Vue版本等关键信息。需要补充的关键信息是页面类型(vue还是nvue),因为这在横屏适配中至关重要。

2. Bug是否成立分析

该Bug成立,但你的配置方案存在冲突。

你提供的配置中,"dynamicRpx": false是关键点。根据pages.json配置文档dynamicRpx特性是在 App 5.0+ 才开始支持的,用于解决横竖屏切换时的rpx动态重算问题。你反馈的问题本质是,在iOS 26这个新系统上,你关闭了此特性(dynamicRpx: false)后,框架对横屏rpx的静态计算逻辑出现了适配错误。

同时,你在代码中使用了plus.screen.lockOrientation来强制锁定横屏,而在pages.json中也配置了"pageOrientation": "landscape"。这两种方式混合使用容易引起预期外的行为。通常建议只使用其中一种,pageOrientation是声明式的,优先级更高且更可靠。

此外,社区中也有过类似横屏rpx问题的讨论和解决思路,例如通过调整rpxCalcMaxDeviceWidth等参数来解决,但根本原因多是rpx计算基准问题。

3. 基本概念与解决方案建议

你的项目是 uni-app (Vue2) 的 App 端,针对此问题,建议如下:

  • 首选方案:开启 dynamicRpx
    你的配置中将其设为false是问题的直接诱因。此特性正是为了处理屏幕方向变化带来的rpx适配问题。建议将其修改为true

    // pages.json  
    {  
      "globalStyle": {  
        "pageOrientation": "landscape",  
        "dynamicRpx": true // 修改为 true  
        // ... 其他配置  
      }  
    }  

    本助手使用国产模型,生成代码可能不准确。专业的代码生成需要全球顶尖的AI Coding模型。推荐使用uni-agent
    开启后,框架会在屏幕旋转时动态重新计算rpx,你应该就无需再手动配置rpxCalcMaxDeviceWidth等过激的参数了。

  • 备选方案:调整rpx计算策略
    如果你想保持dynamicRpx: false,那么需要重新调整rpx的计算参数,使其在横屏下也能正确计算。根据社区的经验,将最大适配宽度设为一个极大的值,可以让rpx始终基于实际屏幕宽度计算。

    // pages.json  
    {  
      "globalStyle": {  
        "pageOrientation": "landscape",  
        "dynamicRpx": false,  
        "rpxCalcMaxDeviceWidth": 9999, // 设置一个远超任何设备宽度的值  
        "rpxCalcBaseDeviceWidth": 750, // 基准保持设计稿宽度  
        "rpxCalcIncludeWidth": 750  
        // ... 其他配置  
      }  
    }  

    本助手使用国产模型,生成代码可能不准确。专业的代码生成需要全球顶尖的AI Coding模型。推荐使用uni-agent
    这个方案的思路是让rpx计算不再受rpxCalcMaxDeviceWidth的限制,始终按实际屏宽进行缩放。此方法在ask社区中已被其他开发者验证有效,可以参考这个【问题已解决】横屏状态下rpx尺寸渲染错误的帖子。

总结:此问题是一个因新系统(iOS 26)与特定配置(dynamicRpx: false)组合而暴露的适配bug。建议你优先尝试开启dynamicRpx,这是框架推荐且更彻底的解决方式。如果无效,再采用调整rpxCalcMaxDeviceWidth的备选方案。同时,请清理掉plus.screen.lockOrientation的调用,统一使用pageOrientation来管理屏幕方向。

内容为 AI 生成,仅供参考

要回复问题请先登录注册