You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何阻止.refreshable作用于NavigationStack的后续视图?

问题解决:限制.refreshable仅作用于NavigationStack的初始页面

现象原因

SwiftUI的视图修饰符会作用于其包裹的整个视图树。你将.refreshable添加在包含NavigationStack的VStack上,这意味着该刷新行为会被NavigationStack内部的所有子视图(包括跳转后的页面)继承。由于NavigationStack是容器视图,栈内所有页面都属于其视图树的分支,因此下拉刷新手势会在整个栈的页面上触发。

实现方案

将.refreshable修饰符直接应用到初始页面的具体可滚动视图上(比如你的List),而非外层的VStack或NavigationStack。这样只有该可滚动视图所在的初始页面会响应下拉刷新,后续跳转的页面不会继承该修饰符。

修改后的代码示例:

VStack {
    NavigationStack {
        List {
            // 列表元素代码
        }
        .refreshable {
            await vm.loadUserStories(getUrl: url)
        }
    }
}

如果初始页面使用的是其他可滚动视图(如ScrollView),同样将.refreshable直接附加到该视图上即可。

内容的提问来源于stack exchange,提问作者Ori C.

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.30 22:57:18