You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

设置backButtonDisplayMode为minimal导致大标题动画异常的解决办法

问题描述

我有一个启用大标题的ViewController,想要将返回按钮设置为.minimal显示模式,但这会导致大标题动画异常——当从弹出的视图控制器返回时,标题不再像默认模式那样从第二个视图控制器的导航栏平滑过渡,而是从当前视图控制器导航栏的位置突兀出现。

正常动画的代码(标题过渡平滑)

class ViewController: UIViewController {
  override func viewDidLoad() {
    super.viewDidLoad()
    navigationController?.navigationBar.prefersLargeTitles = true
    title = "Title"
    navigationItem.backButtonDisplayMode = .default
  }
}

正常动画效果:
正常大标题动画

异常动画的代码(标题过渡突兀)

class ViewController: UIViewController {
  override func viewDidLoad() {
    super.viewDidLoad()
    navigationController?.navigationBar.prefersLargeTitles = true
    title = "Title"
    navigationItem.backButtonDisplayMode = .minimal
  }
}

异常动画效果:
异常大标题动画

请问如何在使用.minimal返回按钮显示模式的同时,保留默认的大标题平滑动画?

解决方案

要解决这个问题,核心是调整backButtonDisplayMode的设置时机,避免在viewDidLoad中直接设置.minimal干扰导航栏的动画布局逻辑。以下两种方法均可实现需求:

方法1:延迟到viewWillAppear中设置

将返回按钮的显示模式设置移到viewWillAppear(_:)方法中,确保导航栏的大标题布局已完成初始化后,再修改返回按钮样式:

class ViewController: UIViewController {
  override func viewDidLoad() {
    super.viewDidLoad()
    navigationController?.navigationBar.prefersLargeTitles = true
    title = "Title"
  }

  override func viewWillAppear(_ animated: Bool) {
    super.viewWillAppear(animated)
    navigationItem.backButtonDisplayMode = .minimal
  }
}

方法2:在子视图控制器中配置返回按钮

如果是从当前视图跳转到子视图的场景,可直接在子视图控制器中设置返回按钮的显示模式。这种方式不会干扰父视图的大标题动画逻辑,同时返回按钮会以.minimal样式显示:

// 子视图控制器代码
class ChildViewController: UIViewController {
  override func viewDidLoad() {
    super.viewDidLoad()
    navigationItem.backButtonDisplayMode = .minimal
    title = "Child"
  }
}

以上两种方法都能在保留.minimal返回按钮样式的同时,让大标题动画保持默认的平滑过渡效果。

内容的提问来源于stack exchange,提问作者Luda

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.03 00:51:10