import SwiftUI enum HomeScrollCoordinateSpace { static let name = "home-scroll" } #if os(iOS) struct HomeScrollOffsetPreferenceKey: PreferenceKey { static let defaultValue: CGFloat = 0 static func reduce(value: inout CGFloat, nextValue: () -> CGFloat) { value = nextValue() } } struct ScrollOffsetObserver: View { let onOffsetChange: (CGFloat) -> Void var body: some View { Color.clear .frame(height: 0) .background( GeometryReader { geometry in Color.clear.preference( key: HomeScrollOffsetPreferenceKey.self, value: geometry.frame(in: .named(HomeScrollCoordinateSpace.name)).minY ) } ) .onPreferenceChange(HomeScrollOffsetPreferenceKey.self) { minY in onOffsetChange(-minY) } } } #endif