Get the current scroll position of a SwiftUI ScrollView Get the current scroll position of a SwiftUI ScrollView swift swift

Get the current scroll position of a SwiftUI ScrollView


It was possible to read it and before. Here is a solution based on view preferences.

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()    }}