如何关闭 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
    }

以下任何一项都可以解决您的问题:

  1. 将 navigationBar 的 prefersLargeTitles 设置为 false

    self.navigationController?.navigationBar.prefersLargeTitles = false
    
  2. 将 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)