uni-app input输入框鸿蒙端收起键盘异常,键盘收起不会下推页面

uni-app input输入框鸿蒙端收起键盘异常,键盘收起不会下推页面

示例代码:

输入框就只有一个简单的绑定,没有其它事件

<input  
type="number"  
value="calc"
/>

操作步骤:

  • 输入框要能够被键盘遮挡,才会触发上推,页面上推之后,点击输入框之外的地方,让输入框失去焦点,键盘会收起,页面不会下推

预期结果:

  • 键盘收起后,上推的页面能够正常下推,恢复原始高度

实际结果:

  • 上推的页面不能下推

bug描述:

  • input组件默认开启的adjust-position属性,会在输入框聚焦的时候上推页面,点击键盘的收起按钮,键盘收起后,是可以正常下推页面的,但是,如果不是点击键盘的收起按钮,点击页面,让input失去焦点,导致键盘收起,那么页面并不会下推,安卓没有这个问题,鸿蒙异常

| 开发环境 | 版本号   | 项目创建方式 |
|----------|----------|--------------|
| Mac      | 26.1     | HBuilderX    |
| HarmonyOS NEXT | HarmonyOS 5.1.1 | - |
| -        | -        | -            |

更多关于uni-app input输入框鸿蒙端收起键盘异常,键盘收起不会下推页面的实战教程也可以访问 https://www.itying.com/category-93-b0.html

4 回复

该bug反馈内容较为完整,标题明确描述了问题核心,BUG描述详细说明了现象(鸿蒙端点击非输入区域收起键盘时页面不下推,而安卓正常)、触发条件(输入框被键盘遮挡后失焦)及平台差异。代码示例简洁但可运行,缺少pages.json中adjust-position相关配置说明,不过结合通用知识仍可复现。复现步骤清晰,预期结果合理(键盘收起应恢复页面位置),实际结果异常,符合bug特征。分类信息完整,包含HBuilderX 4.87、HarmonyOS 5.1.1等关键版本信息。
经核查知识库,adjust-position属性文档明确标注支持范围包括"App-Android、微信小程序等",但未提及HarmonyOS NEXT适配情况。知识库强调"鸿蒙平台与App(安卓和iOS)通常是分开并立的",且uni-app x在鸿蒙平台需调用原生API。反馈中用户使用Vue3+uni-app x(Alpha版),而知识库指出uni-app x的鸿蒙平台"可使用所有适配鸿蒙的sdk",但未说明软键盘处理细节。现有文档App平台软键盘弹出模式说明仅覆盖传统App,不适用于鸿蒙Next。该问题非误报,因知识库未声明鸿蒙平台完全支持adjust-position的完整生命周期(尤其非按钮触发的键盘收起场景)。建议用户检查是否使用最新版HBuilderX(当前4.87可能非最终版),并参考软键盘收起逻辑说明尝试通过blur事件手动重置页面位置作为临时方案。 内容为 AI 生成,仅供参考

更多关于uni-app input输入框鸿蒙端收起键盘异常,键盘收起不会下推页面的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在harmony-configs下有什么内容,有引用旧版本的鸿蒙依赖吗?

libs下只有 uni_modules__uni_share_weixin.har 这个包

这是一个已知的鸿蒙系统兼容性问题。在鸿蒙系统上,当通过点击页面空白区域使输入框失焦时,键盘收起但页面布局未恢复,而点击键盘收起按钮则正常。

解决方案:

  1. 临时方案:在输入框上添加 @blur 事件,手动触发页面滚动复位:
<input 
  type="number" 
  value="calc"
  @blur="handleInputBlur"
/>
handleInputBlur() {
  // 鸿蒙端需要延迟执行以确保键盘已收起
  setTimeout(() => {
    uni.pageScrollTo({
      scrollTop: 0,
      duration: 0
    });
  }, 100);
}
  1. 检查配置:确认 pages.json 中当前页面样式未设置 "disableScroll": true

  2. 平台判断:建议添加条件编译,仅鸿蒙端执行复位逻辑:

// #ifdef HARMONY
setTimeout(() => {
  uni.pageScrollTo({
    scrollTop: 0,
    duration: 0
  });
}, 100);
// #endif
回到顶部