From b61f59c253595d5575e5f73596cd629effa2b76a Mon Sep 17 00:00:00 2001 From: Daniel Arantes Loverde Date: Wed, 3 Jun 2026 11:45:32 -0300 Subject: [PATCH] fix(store): read scrollOffset from ScrollView background to prevent geometry loss during cell recycling --- .../PediFoods/Views/Main/StoreDetailView.swift | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/pedi-foods/Sources/PediFoods/Views/Main/StoreDetailView.swift b/pedi-foods/Sources/PediFoods/Views/Main/StoreDetailView.swift index f9e5e81..8180a3f 100644 --- a/pedi-foods/Sources/PediFoods/Views/Main/StoreDetailView.swift +++ b/pedi-foods/Sources/PediFoods/Views/Main/StoreDetailView.swift @@ -59,7 +59,6 @@ struct StoreDetailView: View { ScrollView(showsIndicators: false) { LazyVStack(spacing: 0) { - ScrollOffsetReader(offsetY: $scrollOffset) topSection Section { sectionedProducts @@ -68,8 +67,22 @@ struct StoreDetailView: View { .opacity(Double(1 - stickyProgress)) } } + .background( + GeometryReader { geometry in + Color.clear.preference( + key: ScrollOffsetPreferenceKey.self, + value: geometry.frame(in: .named(StoreDetailScrollCoordinateSpace.name)).minY + ) + } + ) } .coordinateSpace(name: StoreDetailScrollCoordinateSpace.name) + .onPreferenceChange(ScrollOffsetPreferenceKey.self) { minY in + let normalizedOffset = max(0, -minY) + if abs(scrollOffset - normalizedOffset) > 0.5 { + scrollOffset = normalizedOffset + } + } .refreshable { await loadStoreData(forceRefresh: true) }