以编程方式显示可刷新列表的拉动刷新活动指示器

And*_*eas 5 pull-to-refresh swift swiftui swiftui-list swiftui-environment

我想知道是否有一种简单的方法可以使 SwiftUI 的刷新控件使用的活动指示器可见List?这将提供一致的刷新 UI 外观,无论刷新是如何启动的。

List使用修饰符启用a上的pull刷新后refreshableLists环境就有了它的refresh项目集,RefreshAction供刷新控件使用。我的猜测是,使用它RefreshAction也可能会触发刷新控件的可见性,我尝试过:

struct MyView : View {
    @State var content: Content
    
    var body: some View {
        _MyView(content: $content)
            .refreshable { // assigning `refresh` to the environment
                await refresh()
            }
    }
    
    private func refresh() async {
        // ...
        content = newContent
        // ...
    }
}

struct _MyView : View {
    @Environment(\.refresh) private var refresh
    // [ content binding, etc... ]

    var body: some View {
        List {
            // ...
        }
        .onAppear {
            Task { await refresh?() } // doesn't show the activity indicator of the list
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

这不起作用。

由于我找不到isRefreshing/refreshState或类似的属性,EnvironmentValues我想知道是否有另一种(简单的)方法来触发它的出现?