说明
- UINavigationController 管理状态栏颜色,需要转发给单个控制器
class NavController: UINavigationController {
override func viewDidLoad() {
super.viewDidLoad()
}
override var preferredStatusBarStyle: UIStatusBarStyle {
let top = visibleViewController
return top?.preferredStatusBarStyle ?? super.preferredStatusBarStyle
}
}
隐藏导航栏手势问题
class ViewController: UIViewController, UIGestureRecognizerDelegate {
var pp: Any?
private lazy var button: UIButton = {
let btn = UIButton()
btn.backgroundColor = .red
btn.addTarget(self, action: #selector(test), for: .touchUpInside)
return btn
}()
override func viewDidLoad() {
super.viewDidLoad()
view.backgroundColor = .white
view.addSubview(button)
button.frame = CGRect(x: 100, y: 200, width: 44, height: 44)
self.navigationController?.setNavigationBarHidden(true, animated: false)
let count = navigationController?.viewControllers.count ?? 0
button.setTitle("\(count)", for: .normal)
pp = navigationController?.interactivePopGestureRecognizer?.delegate
}
override func viewDidAppear(_ animated: Bool) {
super.viewDidAppear(animated)
let count = navigationController?.viewControllers.count ?? 0
if count > 1 {
print("self-delegate")
navigationController?.interactivePopGestureRecognizer?.delegate = self
} else {
print("nil-delegate")
navigationController?.interactivePopGestureRecognizer?.delegate = pp as? UIGestureRecognizerDelegate
}
}
@objc func test() {
let controller = ViewController()
navigationController?.pushViewController(controller, animated: true)
}
override var prefersStatusBarHidden: Bool {
return false
}
override var preferredStatusBarStyle: UIStatusBarStyle {
print("\(#function)")
guard let nav = navigationController else {
print("1")
return .default
}
if nav.viewControllers.count % 2 == 0 {
print("2")
return .darkContent
}
print("3")
return .lightContent
}
}