所以我在某种程度上实现了分页,但是,有一个错误。我似乎只能执行 self.searchViewModel.loadMoreData()
一次,而且只有在视图出现时。
这是我的完整代码:
@State var time = Timer.publish(every: 0.1, on: .main, in: .tracking).autoconnect()
var body: some View {
ZStack {
Color(SYSTEM_BACKGROUND_COLOUR)
.edgesIgnoringSafeArea(.all)
GeometryReader { geometry in
VStack(alignment: .center) {
ScrollView(.vertical, showsIndicators: false) {
VStack {
VStack(alignment: .leading) {
if !self.searchViewModel.isLoading {
VStack {
ForEach(self.searchViewModel.post, id: \.postID) { post in
VStack {
HeaderCell(post: post)
FooterCell(post: post)
.onAppear {
self.time = Timer.publish(every: 0.1, on: .main, in: .tracking).autoconnect()
}
.onReceive( self.searchViewModel.time) { (_) in
if geometry.frame(in: .global).maxY < UIScreen.main.bounds.height - 80{
print("Getting data")
self.searchViewModel.loadMoreData()
self.time.upstream.connect().cancel()
}
}
}
}
}
}
}
}
}
}
}
}.navigationBarTitle(Text("Results"), displayMode: .inline)
}
我真的相信这是因为time
没有改变它的状态。由于控制台只打印一次“获取数据”。一旦滚动到视图的末尾,在收集并呈现下一组数据之后,什么也没有发生。几个小时以来,我一直在尝试对此进行排序。我已经阅读了如何@Binding
更好地使用,但是每当我尝试实现它时,我都会遇到不断的错误。
本质上,我只是想检测用户何时一直滚动到我的底部,ScrollView
以便我可以调用该函数来获取下一批信息。我已经尝试了几乎所有可能的解决方案,但没有运气。在我看来,我已经改变并改变了onAppear
&方法。onReceived
任何帮助将非常感激。