你好,我有一个滚动视图,我想知道当用户滑动到它的底部,这样我就可以填充更多的数据到它。我下面的代码是不是工作得很好。当sim启动“你好”打印约5倍,当我几乎没有移动它“你好”打印像10倍以上,当我到达滚动视图的底部,“你好”被打印了大概100次。我怎么才能修复我的代码,使你好只在到达底部时打印。
import SwiftUI
import UIKit
struct FeedView: View {
@State private var scrollViewHeight = CGFloat.infinity
@Namespace private var scrollViewNameSpace
var body: some View {
mainInterFaceView
}
}
extension FeedView{
var mainInterFaceView: some View{
ZStack(){
ScrollView {
LazyVStack {
ForEach(viewModel.tweets) { tweet in
Button {
} label: {
someView()
.background(
GeometryReader { proxy in
Color.clear
.onChange(of: proxy.frame(in: .named(scrollViewNameSpace))) { newFrame in
if newFrame.minY < scrollViewHeight {
print("called")
}
}
}
)
}
}
}
}
.background(
GeometryReader { proxy in
Color.clear
.onChange(of: proxy.size, perform: { newSize in
let _ = print("ScrollView: ", newSize)
scrollViewHeight = newSize.height
})
}
)
.coordinateSpace(name: scrollViewNameSpace)
}
}
}
1条答案
按热度按时间x4shl7ld1#
有一种比使用
GeometryReader
更简单的方法,可以尝试计算偏移量。如果有更多页的数据可用,您只需要在
VStack
的底部显示一个视图(ProgressView
工作得很好),然后在它出现时加载更多数据(使用.task
修饰符)