我已经在HStack中使用了ScrollView,现在当用户最后滚动时,我需要加载更多数据。
var items: [Landmark]
我使用了HStack
在ForEach
中拍过的物品数组
ScrollView(showsHorizontalIndicator: false) {
HStack(alignment: .top, spacing: 0) {
ForEach(self.items) { landmark in
CategoryItem(landmark: landmark)
}
}
}
在不使用自定义操作(例如loadmore按钮)的情况下,在 SwiftUI 中管理更多负载的最佳解决方案是什么。
答案 0 :(得分:2)
为此,最好使用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
}
}
在此示例中,每当您按一下负载时,它都会增加State属性的范围。您可以对BindableObject执行相同的操作。 如果您想自动执行此操作,则可能应该阅读有关PullDownButton的信息(我不确定它是否适用于PullUp)
UPD: 作为选择,您可以使用最后一个单元格上的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()
}
}
}
}
请记住,这种分派是必要的,因为如果没有它,您将看到一个错误消息:“在更新表视图时更新表视图)。可能您可能会使用另一种异步方式来更新数据