如何阻止.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.
相关产品推荐
相关产品推荐

