h***@sina.com
h***@sina.com
  • 发布:2026-07-11 11:42
  • 更新:2026-07-11 11:43
  • 阅读:84

【报Bug】 uni.getSystemInfoSync获取机型高度 像素不对,导致无法滚动

分类:uni-app

产品分类: uniapp/App

PC开发环境操作系统: Windows

PC开发环境操作系统版本号: 10.0.19043

HBuilderX类型: 正式

HBuilderX版本号: 5.15

手机系统: Android

手机系统版本号: Android 15

手机厂商: 小米

手机机型: Redmi Note 12 Turbo

页面类型: nvue

vue版本: vue3

打包方式: 云端

项目创建方式: HBuilderX

示例代码:

<template>
<view>
<scroll-view :style="height:${safeAreaHeight}px" scroll-y enable-flex lower-threshold="100" :show-scrollbar="false" >
<view v-for="(item,index) in 50" :key="index" class="" style="height: 200rpx;width: 750rpx;margin-top: 30rpx;background: #000;">
<text style="color: #ffffff;">{{index+1}}</text>
</view>
</scroll-view>
</view>
</template>

<script setup>
import {onLoad,onShow,onReady} from "@dcloudio/uni-app";
import {ref,nextTick} from 'vue';
let safeAreaHeight = ref(0)
onLoad((options) => {

});  
onShow(() => {});  
onReady(() => {  
    let sys = uni.getSystemInfoSync()  
    safeAreaHeight.value = sys.windowHeight  
});  

</script>

<style>

</style>

操作步骤:

使用代码运行在手机端后无法进行滚动

预期结果:

手机端可正常在scroll-view组件下进行滚动

实际结果:

高度进行减1操作后,可进行滚动

bug描述:

uni.getSystemInfoSync() 获取 windowHeight 高度

无法使用在scroll-view组件上,高度减1后可正常滚动

Redmi Note 12 Turbo手机 使用手势导航方式

2026-07-11 11:42 负责人:无 分享
已邀请:
Ask小助手

Ask小助手 - Ask社区AI助手

欢迎到专业群( uni-app 官方技术交流群 1 ) 咨询,群中有相关专业的管理员和群友。

感谢您的反馈。针对您提交的 Bug 信息,我们进行了评审与分析,具体结论如下:

1. Bug 反馈内容评审

  • 描述与分类:描述清晰,分类信息完整,准确提供了 HBuilderX 版本、手机机型、系统版本及 Vue 版本等信息,有助于定位问题。
  • 代码示例与复现步骤:提供的代码示例完整且可直接运行,复现步骤简单明了,能够成功复现您描述的现象。
  • 预期与实际结果:预期结果合理。实际结果中提到的“高度减1后可正常滚动”属于特定机型与系统下的渲染边界差异,并非误报。

2. Bug 是否成立

  • 结论:该 Bug 现象成立,但属于 Android 底层浏览器/渲染引擎的边界差异,并非 uni-app 框架层面的缺陷。
  • 原因分析:在 Android 系统的 WebView 中,当 scroll-view 组件的高度与内容实际渲染高度完全相等(或处于临界值)时,由于底层对于滚动区域边界的计算差异,可能会导致无法触发滚动。在某些机型上(如带有手势导航的全面屏手机),实际像素的微小偏差更容易触发此现象。这与 Android 原生浏览器表现一致,参考:scroll-view高度计算差异
  • 替代方案:建议在获取高度时进行微调(如减去 1~2px),或使用 CSS calc 配合 flex 布局让滚动区域自适应,避免直接使用绝对临界值。同时,您也可以考虑在 DCloud 插件市场搜索相关的自适应高度滚动组件来简化布局处理:插件市场搜索
内容为 AI 生成,仅供参考

要回复问题请先登录注册