更改导航栏“prefersLargeTitles”时的平滑过渡
Posted
技术标签:
【中文标题】更改导航栏“prefersLargeTitles”时的平滑过渡【英文标题】:Smooth transition when changing navigation bar "prefersLargeTitles" 【发布时间】:2018-09-16 21:57:31 【问题描述】:我有一个位于导航堆栈上的视图控制器 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 = false
到 navigationBar.prefersLargeTitles = true
的变化有点小问题。有什么办法可以让这更顺畅吗?
非常感谢
【问题讨论】:
【参考方案1】:您应该通过您想要影响的特定视图控制器的导航项来更改行为,而不是直接通过导航控制器更改首选项。
// Root UIViewController
class ViewControllerA: UIViewController
override func viewDidLoad()
super.viewDidLoad()
navigationController?.navigationBar.prefersLargeTitles = true
navigationItem.largeTitleDisplayMode = .always
// Pushed UIViewController
class ViewControllerB: UIViewController
override func viewDidLoad()
super.viewDidLoad()
navigationItem.largeTitleDisplayMode = .never
您可以删除viewWillAppear
和viewWillDisappear
中的行。
【讨论】:
非常感谢,这行得通。当ViewControllerA
推动ViewControllerB
时,导航栏尺寸缩小并垂直向上移动;它显示黑色的“基本”屏幕。可以改变这种黑色吗?谢谢
@Callam In ViewControllerA 我想你想要navigationController?.navigationBar.prefersLargeTitles = true
而不是navigationItem.largeTitleDisplayMode = .always
根据 largeTitleDisplayMode 的文档:"如果导航栏的 prefersLargeTitles 属性为 false,则该属性没有效果,并且导航项的标题始终显示为小标题。” 设置prefersLargeTitles = true
时,在这种情况下不必同时设置largeTitleDisplayMode = .always
- 现在尝试一下。以上是关于更改导航栏“prefersLargeTitles”时的平滑过渡的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 prefersLargeTitles 更改标题注册表?
iOS 11 prefersLargeTitles 以 uibutton 作为标题
当 prefersLargeTitles 为 true 时自定义 NavigatioItem TitleView
UINavigationBar.prefersLargeTitles 打开时的错误 UIRefreshControl 行为