使用新的ScrolLViewReader
,似乎可以以编程方式设置滚动偏移量。
但我想知道是否也可以获得当前的滚动位置?
似乎ScrollViewProxy
只有该方法附带scrollTo
,允许我们设置偏移量。
谢谢!
以前可以阅读它。这是一个基于视图偏好的解决方案。
struct DemoScrollViewOffsetView: View {
@State private var offset = CGFloat.zero
var body: some View {
ScrollView {
VStack {
ForEach(0..<100) { i in
Text("Item \(i)").padding()
}
}.background(GeometryReader {
Color.clear.preference(key: ViewOffsetKey.self,
value: -$0.frame(in: .named("scroll")).origin.y)
})
.onPreferenceChange(ViewOffsetKey.self) { print("offset >> \($0)") }
}.coordinateSpace(name: "scroll")
}
}
struct ViewOffsetKey: PreferenceKey {
typealias Value = CGFloat
static var defaultValue = CGFloat.zero
static func reduce(value: inout Value, nextValue: () -> Value) {
value += nextValue()
}
}