*Bug 描述
uni-app Vue3 横屏应用在 iOS 26.4 设备(iPhone 17 Pro Max)上冷启动时,rpx 引擎的基准宽度被错误地锁定在竖屏的短边宽度(≈402px),而非横屏的长边宽度(≈874px)。
开启 dynamicRpx: true 后,uni.getSystemInfoSync().windowWidth 能正确返回横屏宽度,但 rpx 渲染引擎内部的基准值未同步更新,导致所有 rpx 单位的元素按竖屏比例渲染,页面元素整体偏小。
调用 uni.reLaunch() 重载页面后,rpx 基准仍不会更新。
安卓也有类似情况,但是可以通过 uni.reLaunch 重载页面可解决该问题,ios 26.3 之前的ios 系统也不存在这个问题
相关配置
// pages.json
{
"globalStyle": {
"pageOrientation": "landscape",
"screenOrientation": "landscape",
"navigationStyle": "custom",
"dynamicRpx": true
}
}
预期结果
rpx 引擎使用横屏窗口宽度(874px)作为基准:
100rpx = 874 × (100 / 750) = 116.53px
页面元素按横屏比例正常显示。
实际结果
rpx 引擎使用竖屏宽度(≈402px)作为基准:
100rpx = 402 × (100 / 750) = 53.59px
页面元素整体缩小约 54%(53.59 / 116.53)。
调试日志如下:
{
"rectWidth": 53.59375,
"expectedWidth": 116.53333333333333,
"baseWidth": 874,
"windowWidth": 874,
"isLargeScreen": false,
"diff": 62.93958333333333,
"platform": "ios",
"inferredBaseWidth": 401.953125
}
关键矛盾:windowWidth 已正确返回横屏值 874,但 rpx 渲染引擎内部的基准仍为 ≈402(竖屏短边减去安全区域)。uni.reLaunch() 页面重载后基准不变,说明这是引擎层面的冻结,非页面级问题。
环境信息
| 项目 |
值 |
| 设备 |
iPhone 17 Pro Max |
| 系统 |
iOS 26.4 |
| 逻辑分辨率 |
440pt × 956pt(@3x) |
| 框架 |
uni-app Vue3 |
| dynamicRpx |
true |
0 个回复