Pin*_*Gjr 7 scrollview swiftui hstack
我已经将 ScrollView 与 HStack 一起使用,现在我需要在用户最终滚动时加载更多数据。
var items: [Landmark]
我有我在我appeding项的使用的阵列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)
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()
                    }
            }
        }
    }
请记住,该调度是必要的,因为没有它,您将收到一条错误消息,提示“更新表视图时更新表视图”。可能您可以使用另一种异步方式来更新数据
| 归档时间: | 
 | 
| 查看次数: | 3063 次 | 
| 最近记录: |