gpt4 book ai didi

scrollview - 使用 SwiftUI 加载更多功能

转载 作者:行者123 更新时间:2023-12-01 12:06:16 37 4
gpt4 key购买 nike

我已经将 ScrollView 与 HStack 一起使用,现在我需要在用户最终滚动时加载更多数据。

var items: [Landmark]

我使用了我在 HStack 中添加的一系列项目使用 ForEach
ScrollView(showsHorizontalIndicator: false) {
HStack(alignment: .top, spacing: 0) {
ForEach(self.items) { landmark in
CategoryItem(landmark: landmark)
}
}
}

中管理更多负载的最佳解决方案是什么? SwiftUI 不使用像加载更多按钮这样的自定义操作。

最佳答案

为此目的最好使用 ForEach 和 List

struct ContentView : View {
@State var textfieldText: String = "String "
private let chunkSize = 10
@State var range: Range<Int> = 0..<1

var body: some View {
List {
ForEach(range) { number in
Text("\(self.textfieldText) \(number)")
}
Button(action: loadMore) {
Text("Load more")
}
}
}

func loadMore() {
print("Load more...")
self.range = 0..<self.range.upperBound + self.chunkSize
}
}

在这个例子中,你每次按下 load 更多它都会增加 State 属性的范围。您可以为 BindableObject 做同样的事情。
如果您想自动执行此操作,您可能应该阅读 PullDownButton(我不确定它是否适用于 PullUp)

更新:
作为一个选项,您可以通过在最后一个单元格上使用 onAppear 修饰符来下载新项目(在本例中它是一个静态按钮)
var body: some View {
List {
ForEach(range) { number in
Text("\(self.textfieldText) \(number)")
}
Button(action: loadMore) {
Text("")
}
.onAppear {
DispatchQueue.global(qos: .background).asyncAfter(deadline: DispatchTime(uptimeNanoseconds: 10)) {
self.loadMore()
}
}
}
}

请记住,该调度是必要的,因为没有它,您将收到一条错误消息,提示“更新表 View 时更新表 View ”。您可能会使用另一种异步方式来更新数据

关于scrollview - 使用 SwiftUI 加载更多功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56489712/

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