更改导航栏“ prefersLargeTitles”时的平滑过渡

时间:2018-09-16 21:57:31

标签: ios swift uinavigationbar preferslargetitles

我有一个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 = falsenavigationBar.prefersLargeTitles = true的更改有些小毛病。有什么方法可以使它更平滑?

非常感谢

1 个答案:

答案 0 :(得分:4)

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

class ViewControllerA: UIViewController {

    override func viewDidLoad() {

        super.viewDidLoad()

        navigationItem.largeTitleDisplayMode = .always
    }
}

class ViewControllerB: UIViewController {

    override func viewDidLoad() {

        super.viewDidLoad()

        navigationItem.largeTitleDisplayMode = .never
    }
}

您可以删除viewWillAppearviewWillDisappear中的行。