0

所以我在某种程度上实现了分页,但是,有一个错误。我似乎只能执行 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

任何帮助将非常感激。

4

0 回答 0