如何解决SwiftUI-ScrollView和GeometryReader分页错误-@State变量不会更改值
所以我在某种程度上实现了分页,但是有一个错误。我似乎只能执行一次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,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
方法。
任何帮助将不胜感激。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。