Skip to content

Instantly share code, notes, and snippets.

@virasio
Created March 31, 2022 14:45
Show Gist options
  • Save virasio/a6e010116c46668245af1d241b296d14 to your computer and use it in GitHub Desktop.
Save virasio/a6e010116c46668245af1d241b296d14 to your computer and use it in GitHub Desktop.
import UIKit
/// Navigation Controller that forwards `prefersStatusBarHidden` and `preferredStatusBarStyle` properties from `topViewController`.
class PSBNavigationController: UINavigationController {
override var viewControllers: [UIViewController] {
didSet {
setNeedsStatusBarAppearanceUpdate()
}
}
override func viewDidLoad() {
super.viewDidLoad()
let changeHandler: (_KeyValueCodingAndObserving, NSKeyValueObservedChange<Bool>) -> Void = { [weak self] _, _ in
self?.setNeedsStatusBarAppearanceUpdate()
}
_ = observe(\.navigationBar.isTranslucent, changeHandler: changeHandler)
_ = observe(\.navigationBar.isHidden, changeHandler: changeHandler)
}
override var childForStatusBarStyle: UIViewController? {
if navigationBar.isHidden || navigationBar.isTranslucent {
return topViewController
} else {
return super.childForStatusBarStyle
}
}
override var childForStatusBarHidden: UIViewController? {
topViewController
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment