uni-app uni.getSystemInfoSync() 每次调用 获取设备高宽 都不一样

uni-app uni.getSystemInfoSync() 每次调用 获取设备高宽 都不一样

信息类别 详细信息
产品分类 uniapp/App
PC开发环境操作系统 Mac
PC开发环境操作系统版本号 14.5 (23F79)
HBuilderX类型 正式
HBuilderX版本号 4.66
手机系统 iOS
手机系统版本号 iOS 18
手机厂商 苹果
手机机型 iPhone 14 Pro Max
页面类型 nvue
vue版本 vue2
打包方式 云端
项目创建方式 HBuilderX

操作步骤:

  • 直接调用 uni.getSystemInfoSync()

预期结果:

  • 每次都一样的

实际结果:

  • 每次都可能不一样

bug描述:

  • uni.getSystemInfoSync() 调用 返回的 screenHeight, screenWidth, windowHeight, windowWidth 属性每次都不一样

用所选项目新建的文件夹.zip


更多关于uni-app uni.getSystemInfoSync() 每次调用 获取设备高宽 都不一样的实战教程也可以访问 https://www.itying.com/category-93-b0.html

10 回复

使用你给的复现环境测试并没有复现你说的问题,麻烦发个可复现demo

更多关于uni-app uni.getSystemInfoSync() 每次调用 获取设备高宽 都不一样的实战教程也可以访问 https://www.itying.com/category-93-b0.html


我拿基座 运行一个空的项目 的确没有复现 请问是有方法修改了 uni.getSystemInfoSync() 这个的返回值吗? 我之前提过的zip就是打印的返回值

没有方法修改 uni.getSystemInfoSync()的返回值,这个是通过 https://www.html5plus.org/doc/zh_cn/device.html#plus.device.DeviceInfo api 来获取的屏幕宽高

我找到了问题 一个第三方SDK 我只要使用过后 就会把 getSystemInfoSync 返回的宽高 给修改了 请问我还能用API 给恢复吗 ?现在这个第三方SDK 又不能去掉 还联系不到作者

这个不太清楚这个sdk做了什么影响到你了,一般这类的接口都是get类型的,没有set类型的;要不你试试其他的可获取宽高的api,getWindowInfo

getWindowInfo 也被影响了 输出的高宽 和 getSystemInfoSync 一样被修改过的

那你先尝试联系一下sdk的作者吧

你试试 ios18 以上的版本 的确获取的和宽高有误差

这是相关解释

在uni-app中,uni.getSystemInfoSync()获取的设备尺寸信息不一致的问题,通常与iOS设备的动态特性有关:

  1. 状态栏高度变化:iOS设备的状态栏高度在不同场景下会变化(如有无通知、通话状态等),这会影响到windowHeight的值。

  2. 安全区域变化:iPhone 14 Pro Max等全面屏设备,横竖屏切换或应用内嵌WebView时,安全区域(safeArea)会动态调整,导致windowWidth/windowHeight变化。

  3. 屏幕旋转监听:即使锁定竖屏,某些系统事件仍可能触发临时尺寸变化。建议在onShow生命周期获取一次并缓存:

let systemInfo = null;
export default {
  onShow() {
    systemInfo = uni.getSystemInfoSync();
    console.log('缓存设备信息:', systemInfo);
  }
}
回到顶部