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

如何在同一控制器内实现点击按钮触发导航栏大标题转小标题动画

同一控制器内导航栏大小标题平滑切换实现方案

直接修改navigationItem.largeTitleDisplayMode没有动画是因为没有触发导航栏的布局更新,只需将属性修改和强制布局操作放在系统UIView动画闭包内即可实现平滑过渡效果。

实现代码

Swift 版本

// 点击按钮触发切换为小标题的动画
UIView.animate(withDuration: 0.3) {
    self.navigationItem.largeTitleDisplayMode = .never
    self.navigationController?.navigationBar.layoutIfNeeded()
}

// 如需恢复大标题,同理修改mode即可
UIView.animate(withDuration: 0.3) {
    self.navigationItem.largeTitleDisplayMode = .always
    self.navigationController?.navigationBar.layoutIfNeeded()
}

Objective-C 版本

// 切换为小标题
[UIView animateWithDuration:0.3 animations:^{
    self.navigationItem.largeTitleDisplayMode = UINavigationItemLargeTitleDisplayModeNever;
    [self.navigationController.navigationBar layoutIfNeeded];
}];

// 恢复大标题
[UIView animateWithDuration:0.3 animations:^{
    self.navigationItem.largeTitleDisplayMode = UINavigationItemLargeTitleDisplayModeAlways;
    [self.navigationController.navigationBar layoutIfNeeded];
}];

注意事项

  • 确保你的UINavigationController已经全局开启大标题支持,即已设置navigationController?.navigationBar.prefersLargeTitles = true,否则切换操作无效
  • 0.3秒是系统导航栏默认动画时长,和系统动效适配性最好,可根据需求自行调整时长
  • 如果导航栏添加了自定义视图,需要同步在动画闭包内调整自定义视图的布局,避免出现跳变问题

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 08:36:01