@@ -87,6 +87,8 @@ class ReaderDetailViewController: UIViewController, ReaderDetailView {
87
87
private lazy var toolbar = ReaderDetailToolbar ( )
88
88
private var lastContentOffset : CGFloat = 0
89
89
90
+ private var toolbarUpdateTimer : Timer ?
91
+
90
92
/// Likes summary view
91
93
private let likesSummary : ReaderDetailLikesView = . loadFromNib( )
92
94
@@ -136,6 +138,8 @@ class ReaderDetailViewController: UIViewController, ReaderDetailView {
136
138
/// has a comment anchor fragment.
137
139
private var hasAutomaticallyTriggeredCommentAction = false
138
140
141
+ private var isToolbarHidden = false
142
+
139
143
// Reader customization model
140
144
private lazy var displaySettingStore : ReaderDisplaySettingStore = {
141
145
let store = ReaderDisplaySettingStore ( )
@@ -445,6 +449,7 @@ class ReaderDetailViewController: UIViewController, ReaderDetailView {
445
449
446
450
deinit {
447
451
scrollObserver? . invalidate ( )
452
+ toolbarUpdateTimer? . invalidate ( )
448
453
NotificationCenter . default. removeObserver ( self )
449
454
}
450
455
@@ -900,8 +905,23 @@ extension ReaderDetailViewController: UIScrollViewDelegate {
900
905
layoutHeroView ( )
901
906
}
902
907
908
+ private func setNeedsToolbarHidden( _ isHidden: Bool ) {
909
+ // Debounce to prevent it from quickly switching between states when
910
+ // on the edge of the scroll threshold.
911
+ toolbarUpdateTimer? . invalidate ( )
912
+ toolbarUpdateTimer = Timer . scheduledTimer ( withTimeInterval: 0.25 , repeats: false ) { [ weak self] _ in
913
+ self ? . setToolbarHidden ( isHidden, animated: true )
914
+ }
915
+ }
916
+
903
917
private func setToolbarHidden( _ isHidden: Bool , animated: Bool ) {
904
- guard navigationController? . isToolbarHidden != isHidden else { return } // Important
918
+ guard scrollView. contentSize. height > view. bounds. height * 2.5 else {
919
+ return // No point in briefly hiding it
920
+ }
921
+ guard isToolbarHidden != isHidden else {
922
+ return
923
+ }
924
+ isToolbarHidden = isHidden
905
925
navigationController? . setToolbarHidden ( isHidden, animated: animated)
906
926
}
907
927
}
0 commit comments