简体   繁体   English

视图控制器不尊重“largeTitleDisplayMode”

[英]view controller doesn't respect “largeTitleDisplayMode”

It seems that I can't set navigationItem.largeTitleDisplayMode = .always unless I also set navigationBar.prefersLargeTitles = true ?似乎我不能设置navigationItem.largeTitleDisplayMode = .always除非我还设置了navigationBar.prefersLargeTitles = true Is this intended behavior?这是预期的行为吗?

I'm having a really hard time believing apple would force me to manually set largeTitleDisplayMode = .never on every screen in the navigation controller, even ones I don't control, in order to get just a single screen to show with large titles.我真的很难相信苹果会强迫我在导航控制器的每个屏幕上手动设置largeTitleDisplayMode = .never ,即使是我无法控制的屏幕,以便只显示一个带有大标题的屏幕。

You can try controlling this via UINavigationControllerDelegate.willShow calls like this.您可以尝试通过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
    }
    
}

UPDATE更新

The other option would be to do this same management on viewWillAppear(_:) & viewWillDisappear(_:) calls for the rootViewController instance in your navigation stack.另一种选择是对导航堆栈中的 rootViewController 实例的viewWillAppear(_:)viewWillDisappear(_:)调用执行相同的管理。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM