uni-app uni.getSystemInfoSync()在ios端几率性获取宽高参数错误

uni-app uni.getSystemInfoSync()在ios端几率性获取宽高参数错误

开发环境 版本号 项目创建方式
Windows 11 HBuilderX

产品分类:uniapp/H5

浏览器平台:微信内置浏览器
浏览器版本:最新内核版本


示例代码:

var systemInfo= uni.getSystemInfoSync() 直接打印几率性出现这个问题

并且uni.onWindowResize这个api有一个百分百复现的bug,返回的deviceOrientation字段百分百是反序的,然后size里面宽高也全部异常


### 操作步骤:


横屏进入项目时

预期结果:

返回参数正常


### 实际结果:


参数返回异常,并且uni.onWindowResize获取的宽高是否横屏也是异常错误的

bug描述:

截图参数是通过uni.getSystemInfoSync()获取的,很明显宽高字段出现了问题,手机处于横屏状态


更多关于uni-app uni.getSystemInfoSync()在ios端几率性获取宽高参数错误的实战教程也可以访问 https://www.itying.com/category-93-b0.html

6 回复

我看产品分类是 h5 ,我使用下面代码运行 vue3+ HBuilderX alpha 运行到 chrome,切换屏幕方向表现正常。你提供一个复现工程,并明确操作步骤吧。
<template>
<view>123</view>
</template>

<script> export default{ onLoad() { const windowResizeCallback = (res) => { console.log(res.deviceOrientation) console.log('变化后的窗口宽度=' + res.size.windowWidth) console.log('变化后的窗口高度=' + res.size.windowHeight) } uni.onWindowResize(windowResizeCallback) } } </script>

更多关于uni-app uni.getSystemInfoSync()在ios端几率性获取宽高参数错误的实战教程也可以访问 https://www.itying.com/category-93-b0.html


v2去微信浏览器试试,进入项目快速横屏手机纪律性能遇见,然后onWindowResize是百分百有问题的

快速横竖屏旋转手机几率大的很

<template> <view class="" style="width: 100vw;height: 100vh;overflow: hidden;display: flex;justify-content: center;flex-direction: column;"> <view class="" style="width: 100%;height: 100%;display: flex;align-items: center;justify-content: center;"> {{windowInfo}} </view> </view> </template> <script> export default { components: {}, data() { return { windowInfo: {} }; }, onLoad() { this.$nextTick( () => { this.listening() } ) }, methods: { listening() { const windowResizeCallback = ( res ) => { this.$set( this.windowInfo, 'windowWidth', res.size.windowWidth ) this.$set( this.windowInfo, 'windowHeight', res.size.windowHeight ) this.$set( this.windowInfo, 'landscape', res.deviceOrientation == 'landscape' ) console.log( "屏幕变化", this.windowInfo.landscape ? '横屏' : '竖屏', this.windowInfo.windowWidth, this.windowInfo.windowHeight ) } uni.onWindowResize( windowResizeCallback ) } }, }; </script> <style> </style>


感觉是ios端并且微信浏览器才有这个问题

这是一个已知的uni-app在iOS端的系统信息获取问题,主要涉及横屏模式下的宽高参数异常。以下是关键点分析:

  1. getSystemInfoSync()在iOS横屏时确实可能出现宽高值未及时更新的情况,这是系统级延迟导致的。

  2. onWindowResize的deviceOrientation反序问题已确认是微信浏览器内核的bug,建议暂时通过手动校正处理:

const correctOrientation = res.deviceOrientation === 'portrait' ? 'landscape' : 'portrait'
  1. 临时解决方案:
  • 对于宽高问题,可通过window.innerWidth/innerHeight获取实时值
  • 或使用setTimeout延迟100ms再获取系统信息
  1. 官方已将该问题列入修复计划,建议关注uni-app更新日志。当前可通过条件编译区分iOS平台特殊处理:
// #ifdef H5
if(uni.getSystemInfoSync().platform === 'ios'){
    // iOS特殊处理
}
// #endif
回到顶部