具有大标题跳跃的后退按钮动画

Ben*_*nnX 8 animation uiviewcontroller uinavigationcontroller ios

我们有两个UIViewControllerUINavigationController.

viewWillAppear(_ animated: Bool)我们做的第一个介绍VC里面:

    override func viewWillAppear(_ animated: Bool) {
        super.viewWillAppear(animated)
        if #available(iOS 11.0, *) {
            navigationController?.navigationBar.prefersLargeTitles = true
            navigationController?.navigationItem.largeTitleDisplayMode = .always
        }
 ....
Run Code Online (Sandbox Code Playgroud)

在第二个VC的内部我们拒绝了内部的行为viewWillAppear(_ animated: Bool):

override func viewWillAppear(_ animated: Bool) {
    super.viewWillAppear(animated)
    if #available(iOS 11.0, *) {
        navigationController?.navigationBar.prefersLargeTitles = false
    }
...
Run Code Online (Sandbox Code Playgroud)

到第二个VC的过渡动画是平滑的,而点击自动生成的后退按钮会导致导航控制器标题创建一个奇怪的jump to large title而不是正常的grow to large title动画,就像在消息应用程序中那样.

如果我点击标签栏图标作为"后退"操作,它会执行正确的过渡动画.

知道什么可能导致该问题或我如何解决它?

小智 16

在第二个视图控制器上设置largeTitleDisplayMode.never 您将不需要设置prefersLargeTitlesfalse.

为了澄清这里的内容,您需要largeTitleDisplayMode直接设置navigationItem视图控制器,而不是导航控制器!

self.navigationItem.largeTitleDisplayMode = .never // This fixes the issue
self.navigationController?.navigationItem.largeTitleDisplayMode = .never // This doesn't work / Title will stay large
Run Code Online (Sandbox Code Playgroud)