@@ -87,6 +87,8 @@ class ReaderDetailViewController: UIViewController, ReaderDetailView {
8787 private lazy var toolbar = ReaderDetailToolbar ( )
8888 private var lastContentOffset : CGFloat = 0
8989
90+ private var toolbarUpdateTimer : Timer ?
91+
9092 /// Likes summary view
9193 private let likesSummary : ReaderDetailLikesView = . loadFromNib( )
9294
@@ -136,6 +138,8 @@ class ReaderDetailViewController: UIViewController, ReaderDetailView {
136138 /// has a comment anchor fragment.
137139 private var hasAutomaticallyTriggeredCommentAction = false
138140
141+ private var isToolbarHidden = false
142+
139143 // Reader customization model
140144 private lazy var displaySettingStore : ReaderDisplaySettingStore = {
141145 let store = ReaderDisplaySettingStore ( )
@@ -445,6 +449,7 @@ class ReaderDetailViewController: UIViewController, ReaderDetailView {
445449
446450 deinit {
447451 scrollObserver? . invalidate ( )
452+ toolbarUpdateTimer? . invalidate ( )
448453 NotificationCenter . default. removeObserver ( self )
449454 }
450455
@@ -900,8 +905,23 @@ extension ReaderDetailViewController: UIScrollViewDelegate {
900905 layoutHeroView ( )
901906 }
902907
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+
903917 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
905925 navigationController? . setToolbarHidden ( isHidden, animated: animated)
906926 }
907927}
0 commit comments