3

我有一个pushed位于导航堆栈上的视图控制器。堆栈有navigationBar.prefersLargeTitles = true,而这个新的视图控制器有navigationBar.prefersLargeTitles = false。我在推送到堆栈的视图控制器中使用以下代码来实现这一点:

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

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

但是,当我返回呈现视图控制器时,导航栏从navigationBar.prefersLargeTitles = falseto的变化navigationBar.prefersLargeTitles = true有点小故障。有什么办法可以让这个更顺畅吗?

非常感谢

4

1 回答 1

13

您应该通过您想要影响的特定视图控制器的导航项来更改行为,而不是直接通过导航控制器更改首选项。

// Root UIViewController
class ViewControllerA: UIViewController {

    override func viewDidLoad() {

        super.viewDidLoad()

        navigationController?.navigationBar.prefersLargeTitles = true
        navigationItem.largeTitleDisplayMode = .always
    }
}

// Pushed UIViewController
class ViewControllerB: UIViewController {

    override func viewDidLoad() {

        super.viewDidLoad()

        navigationItem.largeTitleDisplayMode = .never
    }
}

您可以删除您在viewWillAppear和中的行viewWillDisappear

于 2018-09-16T23:13:44.470 回答