如何关闭 UINavigationBar 的大标题?
How do I turn off large titles for UINavigationBar?
我在 UINavigationController 中嵌入了一个 UITableView 和一个详细视图:我想为 "My Notes" 打开大标题,但我想为详细视图。类似于默认邮件应用程序在 iPhone 上的工作方式。在那个 segue 期间,我将如何更改导航栏的 prefersLargeTitle
属性?
if #available(iOS 11.0, *) {
self.navigationItem.largeTitleDisplayMode = UINavigationItem.LargeTitleDisplayMode.never
} else {
// Fallback on earlier versions
}
以下任何一项都可以解决您的问题:
将 navigationBar 的 prefersLargeTitles 设置为 false
self.navigationController?.navigationBar.prefersLargeTitles = false
将 navigationItem 的 largeTitleDisplayMode 设置为 never(注意:prefersLargeTitles 必须是 false 否则这将不起作用)
self.navigationController?.navigationItem.largeTitleDisplayMode = .never
注意:如果prefersLargeTitles
为真,那么 largeTitleDisplayMode = .never 将不起作用。导航栏小标题显示依赖于prefersLargeTitles
如果值为 true
,这将启用大标题模式
self.navigationController?.navigationBar.prefersLargeTitles = true
我刚才遇到了同样的问题。
我的用例:
MasterVC:没有largeTitle的基本导航栏
DetailVC: 已启用 largeTitle
--> 当从 DetailVC 返回到 MasterVC 时,我看到一个奇怪的动画,在返回到基本的非 largeTitle 布局之前,它在 Master 上显示了一个 largeTitle 一秒钟。看起来像个小故障。
我按照以下方法修复了它:
在 MasterVC 中 - viewDidLoad
if #available(iOS 11.0, *) {
navigationItem.largeTitleDisplayMode = .never
navigationController?.navigationBar.prefersLargeTitles = false
}
详细VC - viewDidLoad
if #available(iOS 11.0, *) {
navigationItem.largeTitleDisplayMode = .always
navigationController?.navigationBar.prefersLargeTitles = true
}
希望能帮到别人。
很简单
在您的 DetailView 中,您应该将 navigationItem.largeTitleDisplayMode 设置为 .never
(不是 navigationController?。navigationItem.largeTitleDisplayMode !!)
navigationItem.largeTitleDisplayMode = .never
需要注意的是,如果在细节ViewController
上设置largeTitleDisplayMode
为never,prefersLargeTitles
为false,移动时小标题会继续显示一秒通过 UINavigationBar
后退按钮从细节 ViewController
到上一个 ViewController
。
使用willMove(toParent:)
函数在执行segue之前改回标题。
Swift 4
override func willMove(toParent parent: UIViewController?) {
navigationItem.largeTitleDisplayMode = .always
navigationController?.navigationBar.prefersLargeTitles = true
}
可能会很晚,但这可能对某人有用..
在 viewDidLoad 下的详细视图控制器中包含以下代码
navigationItem.largeTitleDisplayMode = .never
SwiftUI 版本
.navigationBarTitle("Title", displayMode: .inline)
我遇到了同样的问题,需要在第二个 ViewController 的故事板上放置一个 NavigationItem。我的 NavigationItem 是由 segue 自动创建的,它在 viewDidLoad()
中的 prefersLargeTitle
在视图出现之前未完成加载。向故事板添加 NavigationItem 解决了这个问题,并允许我在故事板的属性菜单中设置 prefersLargeTitle
。
SwiftUI:
第一步.使用ZStack
第 2 步:.navigationBarTitle("", displayMode: .inline)
我在 UINavigationController 中嵌入了一个 UITableView 和一个详细视图:prefersLargeTitle
属性?
if #available(iOS 11.0, *) {
self.navigationItem.largeTitleDisplayMode = UINavigationItem.LargeTitleDisplayMode.never
} else {
// Fallback on earlier versions
}
以下任何一项都可以解决您的问题:
将 navigationBar 的 prefersLargeTitles 设置为 false
self.navigationController?.navigationBar.prefersLargeTitles = false
将 navigationItem 的 largeTitleDisplayMode 设置为 never(注意:prefersLargeTitles 必须是 false 否则这将不起作用)
self.navigationController?.navigationItem.largeTitleDisplayMode = .never
注意:如果prefersLargeTitles
为真,那么 largeTitleDisplayMode = .never 将不起作用。导航栏小标题显示依赖于prefersLargeTitles
如果值为 true
,这将启用大标题模式self.navigationController?.navigationBar.prefersLargeTitles = true
我刚才遇到了同样的问题。
我的用例:
MasterVC:没有largeTitle的基本导航栏
DetailVC: 已启用 largeTitle
--> 当从 DetailVC 返回到 MasterVC 时,我看到一个奇怪的动画,在返回到基本的非 largeTitle 布局之前,它在 Master 上显示了一个 largeTitle 一秒钟。看起来像个小故障。
我按照以下方法修复了它:
在 MasterVC 中 - viewDidLoad
if #available(iOS 11.0, *) {
navigationItem.largeTitleDisplayMode = .never
navigationController?.navigationBar.prefersLargeTitles = false
}
详细VC - viewDidLoad
if #available(iOS 11.0, *) {
navigationItem.largeTitleDisplayMode = .always
navigationController?.navigationBar.prefersLargeTitles = true
}
希望能帮到别人。
很简单
在您的 DetailView 中,您应该将 navigationItem.largeTitleDisplayMode 设置为 .never
(不是 navigationController?。navigationItem.largeTitleDisplayMode !!)
navigationItem.largeTitleDisplayMode = .never
需要注意的是,如果在细节ViewController
上设置largeTitleDisplayMode
为never,prefersLargeTitles
为false,移动时小标题会继续显示一秒通过 UINavigationBar
后退按钮从细节 ViewController
到上一个 ViewController
。
使用willMove(toParent:)
函数在执行segue之前改回标题。
Swift 4
override func willMove(toParent parent: UIViewController?) {
navigationItem.largeTitleDisplayMode = .always
navigationController?.navigationBar.prefersLargeTitles = true
}
可能会很晚,但这可能对某人有用..
在 viewDidLoad 下的详细视图控制器中包含以下代码
navigationItem.largeTitleDisplayMode = .never
SwiftUI 版本
.navigationBarTitle("Title", displayMode: .inline)
我遇到了同样的问题,需要在第二个 ViewController 的故事板上放置一个 NavigationItem。我的 NavigationItem 是由 segue 自动创建的,它在 viewDidLoad()
中的 prefersLargeTitle
在视图出现之前未完成加载。向故事板添加 NavigationItem 解决了这个问题,并允许我在故事板的属性菜单中设置 prefersLargeTitle
。
SwiftUI:
第一步.使用ZStack 第 2 步:.navigationBarTitle("", displayMode: .inline)