uni-app 鸿蒙Next getSystemInfoSync()返回正确windowWidth、windowHeight时机与其他平台不一致
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()
返回的windowWidth
和windowHeight
时机与其他平台(如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可能不是最新的值
注意:
- 上述代码中的
systemInfo.platform === 'harmonyos'
和systemInfo.version.startsWith('Next')
是假设的条件,实际使用时需要根据鸿蒙Next平台的真实系统信息进行调整。 - 鸿蒙Next平台可能需要通过异步方式获取正确的窗口尺寸,因此在实际应用中,你可能需要将相关逻辑封装成异步函数,并使用
async/await
或Promise来处理。 - 由于不同平台的差异,建议在实际项目中针对每个目标平台进行充分的测试,以确保兼容性和稳定性。