uni-app 华为手机(除荣耀系列)切换系统字体大小时会改变软键盘的高度

uni-app 华为手机(除荣耀系列)切换系统字体大小时会改变软键盘的高度

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

产品分类:
uniapp/App

PC开发环境操作系统:
Windows

HBuilderX类型:
正式

HBuilderX版本号:
3.1.9

手机系统:
Android

手机系统版本号:
Android 10

手机厂商:
华为

手机机型:
HONOR X10

页面类型:
nvue

打包方式:
云端

示例代码:

let sysInfo = uni.getSystemInfoSync()  
let heightDiff = sysInfo.screenHeight - sysInfo.windowHeight  
let statusBar = 0;  
console.log(sysInfo.statusBarHeight);  
if (sysInfo.brand == 'Xiaomi') {  
    statusBar = sysInfo.statusBarHeight;  
}  
console.log(JSON.stringify(sysInfo));  
//e.detail.height 用户获取键盘的高度,由于机型的不同,所以可以加上一个值10或者20  
console.log(e.detail.height);

操作步骤: 直接修改系统字体大小,会发现软键盘高度不一致。

预期结果: 高度一致

实际结果: 高度不同

bug描述: input @focus使用e.detail.height,切换系统字体会发现两次的软键盘高度不一样。


更多关于uni-app 华为手机(除荣耀系列)切换系统字体大小时会改变软键盘的高度的实战教程也可以访问 https://www.itying.com/category-93-b0.html

1 回复

更多关于uni-app 华为手机(除荣耀系列)切换系统字体大小时会改变软键盘的高度的实战教程也可以访问 https://www.itying.com/category-93-b0.html


这是一个已知的华为/荣耀Android机型上的兼容性问题。当系统字体大小改变时,软键盘高度计算会出现偏差。

问题分析:

  1. 系统字体大小变化会影响系统级UI组件的尺寸计算
  2. 华为/荣耀设备在字体缩放时,软键盘高度测量值会发生变化
  3. 这属于厂商ROM层面的适配问题

解决方案:

// 使用更稳定的键盘高度获取方式
onKeyboardHeightChange(e) {
    let keyboardHeight = e.detail.height;
    // 添加容错处理,过滤异常值
    if (keyboardHeight < 100 || keyboardHeight > 500) {
        // 使用默认键盘高度或上次有效值
        return;
    }
    // 存储有效键盘高度供后续使用
    this.keyboardHeight = keyboardHeight;
}

替代方案:

// 使用窗口高度差值计算
getStableKeyboardHeight() {
    const sysInfo = uni.getSystemInfoSync();
    const windowHeight = sysInfo.windowHeight;
    const screenHeight = sysInfo.screenHeight;
    
    // 通过屏幕与窗口高度差估算键盘区域
    const estimatedKeyboardHeight = screenHeight - windowHeight;
    return estimatedKeyboardHeight > 0 ? estimatedKeyboardHeight : 300; // 默认值
}
回到顶部