0

我正在按照不同的课程、教程等自己学习 SwiftUI。

到目前为止一切顺利,但我遇到了一个我找不到解决方案的问题,所以在调查了几个小时后,我决定寻求帮助。

目前,我正在尝试模拟一个社交媒体应用程序,人们可以在其中发布和关注等。我的大部分工作都在工作,但是当我尝试拉动刷新时问题就来了。

我有下一个代码;

GeometryReader{ reader -> AnyView in
                            
    DispatchQueue.main.async {
        if refresh.startOffset == 0{
            refresh.startOffset = reader.frame(in: .global).minY
        }

        refresh.offset = reader.frame(in: .global).minY
                                
       if refresh.offset - refresh.startOffset > 80 && !refresh.started{
           refresh.started = true
        }
                                
        //Check if refresh is started and drag is released
        if refresh.startOffset == refresh.offset && refresh.started && !refresh.released{
            withAnimation(Animation.linear){
                refresh.released = true
            }
            updateData()
        }
    }
return AnyView(Color.black.frame(width: 0, height: 0))
}
.frame(width: 0, height: 0)
                        
                     

ZStack(alignment: Alignment(horizontal: .center, vertical: .top)){
                                
    if refresh.started && refresh.released{
                                    
       ProgressView()
           .progressViewStyle(CircularProgressViewStyle(tint: Color("samadhi_orange")))
           .offset(y: 10)
           .padding(.bottom)

    }else{
       Image(systemName: "arrow.down")
           .font(.system(size: 16, weight: .heavy))
           .foregroundColor(Color("samadhi_orange"))
           .rotationEffect(.init(degrees: refresh.started ? 180 : 0))
           .offset(y: -25)
           .animation(.easeIn) //This is deprecated in my current IOS version but that should be ok
    }
                                
    LazyVStack(){
       ForEach(viewModel.posts(forFilter: mainSelectedFilter)){ post in
           PostCell(viewModel: postCellViewModel(post: post))
               .frame(height: 40) 
              
        }
    }
}

而且我还有下一个功能。

func updateData(){

    //Delaying for smooth animation
    DispatchQueue.main.asyncAfter(deadline: .now() + 1) {
        withAnimation(Animation.linear){ 
            viewModel.fetchPosts()
            refresh.released = false
            refresh.started = false  
        }
    }
}

我正在使用版本 13.0 beta 5 (13A5212g),开发目标是 IOS 15

上面的代码在更新数据时起作用(当下拉刷新时,它会调用我的 ViewModel 中名为 fetchPosts 的函数)

问题是,每次向下滚动一点几何阅读器时,它都会在我的“PostCell”中获取数据,帖子单元格对 firebase 有不同的调用(对于帖子内容和发布帖子的用户)

有谁知道代码有什么问题?欢迎任何提示。如果需要,我可以为我的“postcell”或其他任何东西提供代码。

4

0 回答 0