gpt4 book ai didi

swift - SwiftUI 下拉刷新数据

转载 作者:搜寻专家 更新时间:2023-10-30 22:07:49 26 4
gpt4 key购买 nike

我使用 List 简单地列出了数据。我想添加下拉刷新功能,但我不确定哪种方法最好。

下拉刷新 View 只有在用户尝试从第一个索引下拉时才可见,就像我们在 UITableView 中使用 UIKit 中的 UIRefreshControl 一样

这是在 SwiftUI 中列出数据的简单代码。

struct CategoryHome: View {
var categories: [String: [Landmark]] {
.init(
grouping: landmarkData,
by: { $0.category.rawValue }
)
}

var body: some View {
NavigationView {
List {
ForEach(categories.keys.sorted().identified(by: \.self)) { key in
Text(key)
}
}
.navigationBarTitle(Text("Featured"))
}
}
}

最佳答案

这是我制作的一个简单纯粹 SwiftUI 解决方案,用于向 ScrollView 添加下拉刷新功能。

struct PullToRefresh: View {

var coordinateSpaceName: String
var onRefresh: ()->Void

@State var needRefresh: Bool = false

var body: some View {
GeometryReader { geo in
if (geo.frame(in: .named(coordinateSpaceName)).midY > 50) {
Spacer()
.onAppear {
needRefresh = true
}
} else if (geo.frame(in: .named(coordinateSpaceName)).maxY < 10) {
Spacer()
.onAppear {
if needRefresh {
needRefresh = false
onRefresh()
}
}
}
HStack {
Spacer()
if needRefresh {
ProgressView()
} else {
Text("⬇️")
}
Spacer()
}
}.padding(.top, -50)
}
}

要使用它很简单,只需将它添加到 ScrollView 的顶部并为其指定 ScrollView 的坐标空间即可:

ScrollView {
PullToRefresh(coordinateSpaceName: "pullToRefresh") {
// do your stuff when pulled
}

Text("Some view...")
}.coordinateSpace(name: "pullToRefresh")

关于swift - SwiftUI 下拉刷新数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56493660/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com