Skip to content

Commit bf7664b

Browse files
authored
Fix crash in Reader Article view (#24857)
2 parents 932fd3b + 5415357 commit bf7664b

File tree

1 file changed

+21
-1
lines changed

1 file changed

+21
-1
lines changed

WordPress/Classes/ViewRelated/Reader/Detail/ReaderDetailViewController.swift

Lines changed: 21 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)