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

Navigation Bar大标题push新View Controller时动画异常如何解决?

问题根源

你错误地在每个控制器的viewWillAppear生命周期中直接修改导航栏的prefersLargeTitles属性,这个修改时机晚于push动画的过渡状态计算阶段,导致系统无法正确渲染导航栏的切换动画,就会出现大标题残留、返回按钮不显示的异常。

修复步骤

  • 第一步:全局仅设置一次导航控制器的prefersLargeTitles属性即可,不需要每个子控制器反复修改。你可以在导航控制器初始化时设置,或者在主视图控制器的viewDidLoad中添加一次:
navigationController?.navigationBar.prefersLargeTitles = true
  • 第二步:修改主视图控制器代码,删除viewWillAppear中修改prefersLargeTitles的逻辑,在viewDidLoad中为当前控制器单独指定大标题显示模式:
// 主控制器viewDidLoad中添加
navigationItem.largeTitleDisplayMode = .always

修改后的主控制器viewWillAppear可以直接删除原有逻辑,如果你没有其他操作的话可以直接移除这个方法。

  • 第三步:修改目标控制器AddUser的代码,删除viewWillAppear中修改prefersLargeTitles的逻辑,在viewDidLoad中为当前控制器单独指定大标题显示模式:
// AddUser的viewDidLoad中添加
navigationItem.largeTitleDisplayMode = .never

补充说明

navigationItem.largeTitleDisplayMode是每个控制器独有的配置项,系统会在push/pop的时候自动根据前后两个控制器的该属性值计算过渡动画,不会出现状态冲突。直接修改全局的导航栏prefersLargeTitles会打断正在进行的切换动画,是官方不推荐的写法。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 22:09:00