uni-app 鸿蒙Next getSystemInfoSync()返回正确windowWidth、windowHeight时机与其他平台不一致

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

uni-app 鸿蒙Next getSystemInfoSync()返回正确windowWidth、windowHeight时机与其他平台不一致

操作步骤:

  • 在onLoad和onShow中查看uni.getSystemInfoSync()返回值。

预期结果:

  • windowWidth、windowHeight正确。

实际结果:

  • windowWidth、windowHeight为0。只有setTimeout延时后执行uni.getSystemInfoSync()才能正确取值。

bug描述:

  • 鸿蒙Next,page的onLoad和onShow中,通过uni.getSystemInfoSync()取得的windowWidth、windowHeight都为0,只有setTimeout延时才能正确取值,而iOS、android在onload即能正确取值。

| 项目名称       | 值               |
|----------------|------------------|
| 产品分类       | uniapp/App       |
| PC开发环境操作系统 | Windows          |
| PC开发环境操作系统版本号 | win10            |
| HBuilderX类型  | 正式             |
| HBuilderX版本号 | 4.29             |
| 手机系统       | HarmonyOS NEXT   |
| 手机系统版本号  | HarmonyOS NEXT Developer Beta2 |
| 手机厂商       | 模拟器           |
| 手机机型       | DevEco模拟器、云真机 |
| 页面类型       | vue              |
| vue版本        | vue3             |
| 打包方式       | 离线             |
| 项目创建方式   | HBuilderX        |

更多关于uni-app 鸿蒙Next getSystemInfoSync()返回正确windowWidth、windowHeight时机与其他平台不一致的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html

2 回复

确实有这个问题

更多关于uni-app 鸿蒙Next getSystemInfoSync()返回正确windowWidth、windowHeight时机与其他平台不一致的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在开发uni-app应用时,尤其是在适配鸿蒙Next平台时,确实可能会遇到getSystemInfoSync()返回的windowWidthwindowHeight时机与其他平台(如iOS、Android)不一致的问题。这通常是由于不同平台的系统特性和渲染机制导致的。为了确保在不同平台上都能正确获取窗口尺寸,你可以采取一些策略来优化代码,确保在合适的时机获取这些值。

以下是一个示例代码,展示了如何在uni-app中处理不同平台获取窗口尺寸的逻辑:

// 引入uni-app的API
const systemInfo = uni.getSystemInfoSync();

// 定义一个函数来获取窗口宽度和高度
function getWindowDimensions() {
    let windowWidth = 0;
    let windowHeight = 0;

    // 尝试直接获取系统信息
    const initialInfo = uni.getSystemInfoSync();
    windowWidth = initialInfo.windowWidth;
    windowHeight = initialInfo.windowHeight;

    // 针对鸿蒙Next平台做特殊处理(假设有特定的标识)
    if (systemInfo.platform === 'harmonyos' && systemInfo.version.startsWith('Next')) {
        // 鸿蒙Next平台可能需要延迟获取,使用setTimeout模拟
        setTimeout(() => {
            const delayedInfo = uni.getSystemInfoSync();
            windowWidth = delayedInfo.windowWidth;
            windowHeight = delayedInfo.windowHeight;
            console.log('鸿蒙Next平台获取到的窗口尺寸:', windowWidth, windowHeight);
            // 在此处处理获取到的尺寸,比如更新UI
        }, 500); // 延迟时间可能需要根据实际情况调整
    } else {
        console.log('其他平台获取到的窗口尺寸:', windowWidth, windowHeight);
        // 在此处处理获取到的尺寸
    }

    // 返回当前获取到的尺寸(注意:鸿蒙Next平台可能需要异步处理)
    return { windowWidth, windowHeight };
}

// 调用函数获取窗口尺寸
const dimensions = getWindowDimensions();
// 注意:鸿蒙Next平台可能需要异步处理,因此直接使用dimensions可能不是最新的值

注意

  1. 上述代码中的systemInfo.platform === 'harmonyos'systemInfo.version.startsWith('Next')是假设的条件,实际使用时需要根据鸿蒙Next平台的真实系统信息进行调整。
  2. 鸿蒙Next平台可能需要通过异步方式获取正确的窗口尺寸,因此在实际应用中,你可能需要将相关逻辑封装成异步函数,并使用async/await或Promise来处理。
  3. 由于不同平台的差异,建议在实际项目中针对每个目标平台进行充分的测试,以确保兼容性和稳定性。
回到顶部