fix(store): read scrollOffset from ScrollView background to prevent geometry loss during cell recycling

This commit is contained in:
Daniel Arantes Loverde
2026-06-03 11:45:32 -03:00
parent 981703bcc5
commit b61f59c253

View File

@@ -59,7 +59,6 @@ struct StoreDetailView: View {
ScrollView(showsIndicators: false) { ScrollView(showsIndicators: false) {
LazyVStack(spacing: 0) { LazyVStack(spacing: 0) {
ScrollOffsetReader(offsetY: $scrollOffset)
topSection topSection
Section { Section {
sectionedProducts sectionedProducts
@@ -68,8 +67,22 @@ struct StoreDetailView: View {
.opacity(Double(1 - stickyProgress)) .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) .coordinateSpace(name: StoreDetailScrollCoordinateSpace.name)
.onPreferenceChange(ScrollOffsetPreferenceKey.self) { minY in
let normalizedOffset = max(0, -minY)
if abs(scrollOffset - normalizedOffset) > 0.5 {
scrollOffset = normalizedOffset
}
}
.refreshable { .refreshable {
await loadStoreData(forceRefresh: true) await loadStoreData(forceRefresh: true)
} }