uni-app 页面自动下拉刷新并非默认行为,实际源于三处误触发:pages.json 中 enablePullDownRefresh 未关闭、iOS Safari 原生下拉刷新未拦截、scroll-view 的 refresher-enabled 被误启用。

页面自动下拉刷新不是 uni-app 的默认行为,所谓“自动触发”基本是误判 —— 真正的问题通常是:iOS Safari 浏览器原生下拉刷新被激活,或 enablePullDownRefresh 配置未关闭,或 scroll-view 的 refresher-enabled 被设为 true 且未受控。
pages.json 里没关掉 enablePullDownRefresh
这是最常见原因:你没在当前页面的 pages.json 中显式关闭它,而全局又开了("globalStyle": {"enablePullDownRefresh": true}),导致所有页面都支持下拉刷新。
- 检查
pages.json中该页面的style节点,确认没有"enablePullDownRefresh": true;若存在,删掉或设为false - 如果全局开启了
enablePullDownRefresh,建议改为false,只对需要的页面单独开启 —— 避免意外触发 - 修改后必须重新编译 H5 或小程序,热更新不生效
uni-app H5 在 iOS Safari 上无法禁用原生下拉刷新
即使你没配 enablePullDownRefresh,iOS Safari 仍会在页面顶部下拉时触发浏览器级刷新(显示“松开刷新”提示),这不是 uni-app 控制的,而是浏览器行为。
- 必须在 H5 环境中主动拦截:给
document.body和document.documentElement设置overscroll-behavior: none - 同时监听
touchmove事件,当页面滚动到顶部且用户继续下拉时,调用event.preventDefault() - 注意:仅在
#ifdef H5块内执行,否则会干扰小程序和 App 端的正常滚动 - 不要只靠 CSS —— 某些旧版 iOS Safari(如 iOS 15.4 之前)不支持
overscroll-behavior,必须配合 JS 拦截
scroll-view 组件误启 refresher-enabled
如果你用了 <scroll-view> 并设置了 refresher-enabled="true",它会独立于页面级下拉刷新,自行触发下拉动画 —— 这不是“页面自动刷新”,但表现类似,且 uni.stopPullDownRefresh() 对它无效。
- 检查模板中是否写了
refresher-enabled、refresher-triggered等属性;不需要就删掉 - 若需条件控制,用
:refresher-enabled="canPull",并在 data 中初始化canPull: false - 注意:该组件的刷新状态由
@refresherrefresh触发,停止动画需手动控制refresher-triggered的绑定值(设为false),而非调用uni.stopPullDownRefresh()
真正要关的从来不是“uni-app 的自动刷新”,而是三处可能的源头:配置项开着、浏览器在捣乱、或者 scroll-view 自己在刷。漏掉任意一处,用户在 iOS 上一划就刷新,根本停不住。


















