More consistent scrolling to top behavior

This commit is contained in:
William Casarin
2023-02-20 14:26:45 -08:00
parent 54dd2035a1
commit 826fd1ef33

View File

@@ -42,6 +42,10 @@ struct TimelineView: View {
var MainContent: some View { var MainContent: some View {
ScrollViewReader { scroller in ScrollViewReader { scroller in
ScrollView { ScrollView {
Color.white.opacity(0)
.id("startblock")
.frame(height: 1)
InnerTimelineView(events: events, damus: damus, show_friend_icon: show_friend_icon, filter: loading ? { _ in true } : filter) InnerTimelineView(events: events, damus: damus, show_friend_icon: show_friend_icon, filter: loading ? { _ in true } : filter)
.redacted(reason: loading ? .placeholder : []) .redacted(reason: loading ? .placeholder : [])
.shimmer(loading) .shimmer(loading)
@@ -56,13 +60,9 @@ struct TimelineView: View {
.buttonStyle(BorderlessButtonStyle()) .buttonStyle(BorderlessButtonStyle())
.coordinateSpace(name: "scroll") .coordinateSpace(name: "scroll")
.onReceive(NotificationCenter.default.publisher(for: .scroll_to_top)) { _ in .onReceive(NotificationCenter.default.publisher(for: .scroll_to_top)) { _ in
let delay = events.has_incoming ? 0.1 : 0.0
events.flush() events.flush()
guard let event = events.events.filter(self.filter).first else {
return
}
self.events.should_queue = false self.events.should_queue = false
scroll_to_event(scroller: scroller, id: event.id, delay: delay, animate: true, anchor: .top) scroll_to_event(scroller: scroller, id: "startblock", delay: 0.0, animate: true, anchor: .top)
} }
} }
.onAppear { .onAppear {