在 SwiftUI 中,如何向列表添加滚动刷新功能?

Posted

技术标签:

【中文标题】在 SwiftUI 中,如何向列表添加滚动刷新功能?【英文标题】:In SwiftUI how can I add scroll to refresh functionality to List? 【发布时间】:2020-02-07 00:41:16 【问题描述】:

如果我有一个 SwiftUI 列表,它通过 API 调用从我的服务器获取其值,例如:

var body: some View 
    List 
        ForEach(viewModel.items)  item in
            ListItemsView(item: item)
        
    
    .onAppear 
        self.viewModel.getAllItems()
           

项目数组存储在 viewModel 中的 @Published var items

func .getAllItems() 调用服务器 API,该 API 返回一个项目数组并将它们存储在 @Published var items

如何添加向下滑动List 并再次调用.getAllItems() 的功能,以便使用新值更新items,并在理论上重新渲染List

或者有没有更好的方法来做到这一点,我没有看到?

【问题讨论】:

我面临同样的问题,因为我理解标准 SwiftUI ScrollView 不能自动滚动。需要使用自定义的ScrollView 你碰巧实现了这个吗?任何代码都会有很大帮助! 我在想,从 api 部分加载数据。假设首先加载 10 条记录,然后向下滚动加载更多 10 条记录。但是这种功能我在标准的 SwiftUI ScrollView 中找不到 【参考方案1】:

在 Xcode 13 和 ios 15+ 中,您可以使用新的 refreshable() 修饰符

List(events)  event in
            Text(event.name)
        
        .refreshable 
            print("Get New Events")
        

【讨论】:

【参考方案2】:

这是一个将适当的 UIRefreshControl 添加到 SwiftUI 列表的表格视图的实现:https://github.com/timbersoftware/SwiftUIRefresh

【讨论】:

不,它没有添加适当的 UIRefresh 控件

以上是关于在 SwiftUI 中,如何向列表添加滚动刷新功能?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 SwiftUI 中使用 .refreshable 调用 API 并刷新列表

如何防止 TextEditor 在 SwiftUI 中滚动?

如何在 SwiftUI 中制作水平列表?

SwiftUI 滚动/列表滚动事件

SwiftUI:将列表添加到带有上方图标的滚动视图中

SwiftUI List 在任何视图更改时重置滚动