Swift 如何只保留带有大标题的第一页?

问题描述

导航项的大标题在应用刚刚描述执行时出现。但是,当我移动到另一个页面并返回时,该模式已关闭。为每个页面创建一个viewDidLoad,如下所示:有什么问题?

class CollectionViewController: UIViewController {

override func viewDidLoad() {
    super.viewDidLoad()
    
    navigationController?.navigationBar.prefersLargeTitles = true
    self.navigationItem.largeTitledisplayMode = .always
}

下一页

class AssetCollectionViewController: UIViewController {
override func viewDidLoad() {
    super.viewDidLoad()
    
    self.navigationItem.largeTitledisplayMode = .never
}

可能添加代码不起作用。

    override func viewDiddisappear(_ animated: Bool) {
    
    self.navigationItem.largeTitledisplayMode = .always
}

解决方法

viewWillppear 函数中更改 titleDisplay 模式,因为它将始终执行

class CollectionViewController: UIViewController {

    override func viewWillAppear(_ animated: Bool) {
        super.viewWillAppear(animated)    
        navigationController?.navigationBar.prefersLargeTitles = true
        self.navigationItem.largeTitleDisplayMode = .always
    }
,

如何在 CollectionViewController 中像这样完成所有实现:

override func viewWillDisappear(_ animated: Bool) {
    navigationController?.navigationBar.prefersLargeTitles = false

}

override func viewWillAppear(_ animated: Bool) {
    super.viewWillAppear(animated)
    navigationController?.navigationBar.prefersLargeTitles = true
}
,

navigationItem.largeTitleDisplayMode 中设置 viewDidDisappear(_:) 时,是为当前控制器的 navigationItem 设置。

我建议您创建 UINavigationController 子类:

override func viewDidLoad() {
    super.viewDidLoad()
    
    navigationBar.prefersLargeTitles = true
}

然后在不想要大标题的控制器中将 navigationItem.largeTitleDisplayMode 设置为 .never