diff --git a/readeck/UI/BookmarkDetail/BookmarkDetailLegacyView.swift b/readeck/UI/BookmarkDetail/BookmarkDetailLegacyView.swift index bd03913..92736b3 100644 --- a/readeck/UI/BookmarkDetail/BookmarkDetailLegacyView.swift +++ b/readeck/UI/BookmarkDetail/BookmarkDetailLegacyView.swift @@ -9,6 +9,14 @@ struct ScrollOffsetPreferenceKey: PreferenceKey { } } +// PreferenceKey for content height tracking +struct ContentHeightPreferenceKey: PreferenceKey { + static var defaultValue: CGFloat = 0 + static func reduce(value: inout CGFloat, nextValue: () -> CGFloat) { + value = nextValue() + } +} + struct BookmarkDetailLegacyView: View { let bookmarkId: String @Binding var useNativeWebView: Bool @@ -17,6 +25,7 @@ struct BookmarkDetailLegacyView: View { @State private var viewModel: BookmarkDetailViewModel @State private var webViewHeight: CGFloat = 300 + @State private var contentHeight: CGFloat = 0 @State private var showingFontSettings = false @State private var showingLabelsSheet = false @State private var readingProgress: Double = 0.0 @@ -113,16 +122,27 @@ struct BookmarkDetailLegacyView: View { .frame(maxWidth: .infinity) } } + .background( + GeometryReader { contentGeo in + Color.clear.preference( + key: ContentHeightPreferenceKey.self, + value: contentGeo.size.height + ) + } + ) } .coordinateSpace(name: "scrollView") .clipped() .ignoresSafeArea(edges: .top) .scrollPosition($scrollPosition) + .onPreferenceChange(ContentHeightPreferenceKey.self) { height in + contentHeight = height + } .onPreferenceChange(ScrollOffsetPreferenceKey.self) { offset in // Calculate progress from scroll offset let scrollOffset = -offset.y // Negative because scroll goes down let containerHeight = geometry.size.height - let maxOffset = webViewHeight - containerHeight + let maxOffset = contentHeight - containerHeight guard maxOffset > 0 else { return } diff --git a/readeck/UI/BookmarkDetail/BookmarkDetailView2.swift b/readeck/UI/BookmarkDetail/BookmarkDetailView2.swift index 4f1117a..19b4483 100644 --- a/readeck/UI/BookmarkDetail/BookmarkDetailView2.swift +++ b/readeck/UI/BookmarkDetail/BookmarkDetailView2.swift @@ -10,6 +10,7 @@ struct BookmarkDetailView2: View { @State private var viewModel: BookmarkDetailViewModel @State private var webViewHeight: CGFloat = 300 + @State private var contentHeight: CGFloat = 0 @State private var showingFontSettings = false @State private var showingLabelsSheet = false @State private var readingProgress: Double = 0.0 @@ -120,16 +121,27 @@ struct BookmarkDetailView2: View { .frame(maxWidth: .infinity) } } + .background( + GeometryReader { contentGeo in + Color.clear.preference( + key: ContentHeightPreferenceKey.self, + value: contentGeo.size.height + ) + } + ) } .coordinateSpace(name: "scrollView") .clipped() .ignoresSafeArea(edges: .top) .scrollPosition($scrollPosition) + .onPreferenceChange(ContentHeightPreferenceKey.self) { height in + contentHeight = height + } .onPreferenceChange(ScrollOffsetPreferenceKey.self) { offset in // Calculate progress from scroll offset let scrollOffset = -offset.y let containerHeight = geometry.size.height - let maxOffset = webViewHeight - containerHeight + let maxOffset = contentHeight - containerHeight guard maxOffset > 0 else { return }