4***@qq.com
4***@qq.com
  • 发布:2026-03-26 13:33
  • 更新:2026-03-26 13:34
  • 阅读:10

【报Bug】ios使用scroll-view或uni-list在uniapp的nvue页面,监听@scroll 实现下拉刷新和上拉加载卡死

分类:uni-app

产品分类: uniapp/App

PC开发环境操作系统: Windows

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

HBuilderX类型: 正式

HBuilderX版本号: 5.05

手机系统: iOS

手机系统版本号: iOS 26

手机厂商: 苹果

手机机型: iphone15

页面类型: nvue

vue版本: vue3

打包方式: 云端

项目创建方式: HBuilderX

示例代码:
自定义的组件 <template> <!-- 组件根容器需要view --> <view class="refresh_container"> <view class="refresh_cn" :style="{height:dynamicHeight+'px'}" v-if="dynamicHeight > 0"> <uni-load-more status="loading" v-if="dynamicHeight > 0" style="{height:(dynamicHeight<40?dynamicHeight:40)+'px'}" /> </view>
<scroll-view v-if="!isEmpty" :scroll-y="true" @scroll="onScroll" @scrolltoupper="scrollTop()"
@scrolltolower="onLoadMore()" :refresher-enabled="false" @touchstart="onTouchStart"
@touchmove.stop="onTouchMove" @touchend="onTouchEnd" :scroll-with-animation="false"
refresher-default-style="black" :enable-back-to-top="false" :enhanced="true" refresher-background="#f6f7f8" show-scrollbar="false" :style="{height:getHeight()}" :id="id"> <view class="scroll_cn">
<slot></slot>
<uni-load-more v-if="keepLoadMore" :status="loadStatus" />
</view>
</scroll-view>
<EmptyView v-if="isEmpty" @emptyClick="onRefresh" :scrollHeight="getHeight()" :hint="emptyHint" />
</view>
</template>

<script setup la

操作步骤:

在苹果机上运行时,当第2个列表页正在滑动时返回到上一个列表页,上一个列表页滑动几下,除导航栏外页面中所有事件无效

预期结果:

页面滑动不卡死

实际结果:

第2页滑动中返回,导致上一页卡死

bug描述:

自定义下拉刷新和上拉加载组件。实现后在苹果机上运行时,当第2个列表页滑动时返回到上一个列表页,上一个列表页滑动几下,除导航栏外页面中所有事件无效

2026-03-26 13:33 负责人:无 分享
已邀请:
Ask小助手

Ask小助手 - Ask社区AI助手

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

这个 bug 反馈的内容存在以下需要补充和说明的地方:

关于反馈完整性:
代码示例不完整,<script setup 部分被截断,缺少完整的逻辑实现(包括 onScrollonTouchStartonTouchMove 等方法的实现)。这导致官方人员无法直接运行验证问题,建议补充完整的组件代码和页面调用示例。

关于问题本身:
根据知识库记录,nvue 已经不再维护。DCloud 官方人员明确说明:"nvue 不在维护了,现在也还能用,但是有问题,可能没办法处理"。

您当前遇到的问题(iOS 下 nvue 页面返回后 scroll-view 事件卡死)属于 nvue 平台的已知限制范畴。nvue 使用原生渲染机制,在页面生命周期管理和事件处理上存在诸多边界情况,特别是页面返回时的手势冲突和事件解绑问题。

建议的解决方案:

  1. 迁移到 uni-app x (uvue):建议将 nvue 页面迁移到 uvue 页面。uvue 是新一代的 uni-app 原生渲染引擎,完全替代 nvue,使用 UTS 语言开发,性能更好且持续维护。uvue 中可以使用 list-view 组件替代 nvue 的 list,使用 scroll-view 也有更好的支持。相关文档

  2. 改用 vue 页面:如果暂时无法迁移,建议改用 vue 页面(webview 渲染),使用页面级滚动配合 pages.json 中的原生下拉刷新配置,避免使用 scroll-view 的区域滚动。根据文档,"webview渲染时,scroll-view 不适合放长列表,有性能问题。webview渲染时,建议改用webview的页面滚动"。

  3. 使用社区插件:如果必须保留当前方案,可以尝试插件市场中基于 scroll-view 封装的下拉刷新组件,但无法保证在 nvue 上的稳定性。

关于复现:
鉴于 nvue 的维护状态,即使您补充了完整代码,该问题大概率无法通过官方修复解决。建议您评估迁移到 uvue 或改用 vue 页面的成本。

如果您需要保留原生渲染性能,推荐尽快迁移到 uni-app x 的 uvue 方案,这是官方目前主推且持续维护的原生渲染技术路线。

内容为 AI 生成,仅供参考

要回复问题请先登录注册