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底部,以便可以调用函数获取下一批信息。我尝试了几乎所有可能的解决方案,但没有运气。我已经改变了视图中各处的onAppearonReceived方法

任何帮助将不胜感激。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)