navigationItem.largeTitleDisplayMode = .always
除非我也设置,否则我似乎无法设置navigationBar.prefersLargeTitles = true
?这是预期的行为吗?
我很难相信苹果会强迫我largeTitleDisplayMode = .never
在导航控制器的每个屏幕上手动设置,即使是我无法控制的屏幕,以便只显示一个带有大标题的屏幕。
navigationItem.largeTitleDisplayMode = .always
除非我也设置,否则我似乎无法设置navigationBar.prefersLargeTitles = true
?这是预期的行为吗?
我很难相信苹果会强迫我largeTitleDisplayMode = .never
在导航控制器的每个屏幕上手动设置,即使是我无法控制的屏幕,以便只显示一个带有大标题的屏幕。
您可以尝试通过这样的UINavigationControllerDelegate.willShow调用来控制它。
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
self.navigationController?.delegate = self
}
}
// Assumption: ViewController is rootViewController for the UINavigationController
extension ViewController: UINavigationControllerDelegate {
func navigationController(_ navigationController: UINavigationController, willShow viewController: UIViewController, animated: Bool) {
let isRootVC = (viewController === self)
viewController.navigationItem.largeTitleDisplayMode = isRootVC ? .always : .never
}
}
另一种选择是对导航堆栈中的 rootViewController 实例的viewWillAppear(_:)
&调用执行相同的管理。viewWillDisappear(_:)