如何关闭UINavigationBar的大型游戏?

A T*_*hka 15 uinavigationbar uinavigationcontroller uilabel ios swift

我在UINavigationController中嵌入了UITableView和Detail View,如下所示: 在此输入图像描述我想为"我的笔记"打开大型标题,但我想将其关闭以获取详细视图.类似于默认的Mail应用程序在iPhone上的工作方式.如何prefersLargeTitle在segue期间更改导航栏的属性?

Voj*_*vik 11

SwiftUI 版本

.navigationBarTitle("Title", displayMode: .inline)
Run Code Online (Sandbox Code Playgroud)


小智 7

这很简单。

在您的DetailView中,您应该将navigationItem.largeTitleDisplayMode设置为.never

(不是navigationController?.navigationItem.largeTitleDisplayMode !!)

navigationItem.largeTitleDisplayMode = .never
Run Code Online (Sandbox Code Playgroud)


Edo*_*ier 6

我刚才有同样的问题。

我的用例:

MasterVC:没有 largeTitle 的基本导航栏

DetailVC:启用大标题

--> 当从 DetailVC 返回 MasterVC 时,我看到一个奇怪的动画,它在返回基本的非 largeTitle 布局之前在 Master 上显示了 largeTitle 一秒钟。它看起来像是一个小故障。

我按照这种方法修复了它:

在 MasterVC 中- viewDidLoad

if #available(iOS 11.0, *) {
     navigationItem.largeTitleDisplayMode = .never
     navigationController?.navigationBar.prefersLargeTitles = false
}
Run Code Online (Sandbox Code Playgroud)

详细VC - viewDidLoad

if #available(iOS 11.0, *) {
     navigationItem.largeTitleDisplayMode = .always
     navigationController?.navigationBar.prefersLargeTitles = true
} 
Run Code Online (Sandbox Code Playgroud)

我希望能帮助别人。


Aar*_*ron 6

应当注意的是,如果设置largeTitleDisplayMode为never,以及prefersLargeTitles对细节错误ViewController,小题将继续从细节移动时显示第二ViewController到先前ViewController通过的UINavigationBar后退按钮。

willMove(toParent:)在执行转场之前使用函数将标题改回。

斯威夫特 4

override func willMove(toParent parent: UIViewController?) {
    navigationItem.largeTitleDisplayMode = .always
    navigationController?.navigationBar.prefersLargeTitles = true
}
Run Code Online (Sandbox Code Playgroud)


A T*_*hka 5

    if #available(iOS 11.0, *) {
        self.navigationItem.largeTitleDisplayMode = UINavigationItem.LargeTitleDisplayMode.never
    } else {
        // Fallback on earlier versions
    }
Run Code Online (Sandbox Code Playgroud)


Kru*_*nal 5

以下两个中的任何一个,将解决你的问题:

  1. 为navigationBar 设置preferredsLargeTitles为false

    self.navigationController?.navigationBar.prefersLargeTitles = false
    
    Run Code Online (Sandbox Code Playgroud)
  2. 将navigationItem的largeTitleDisplayMode设置为从不(请注意:preferredLargeTitles必须为false,否则将不起作用)

    self.navigationController?.navigationItem.largeTitleDisplayMode = .never
    
    Run Code Online (Sandbox Code Playgroud)

注意:如果prefersLargeTitles为true,则largeTitleDisplayMode =。从不起作用。导航栏的小标题显示取决于prefersLargeTitles

如果值为true,将启用大标题模式

self.navigationController?.navigationBar.prefersLargeTitles = true
Run Code Online (Sandbox Code Playgroud)

  • 这是不正确的。preferencesLargeTitles对于#2不必为假。并且largeTitleDisplayMode =。当preferredLargeTitles为true时,绝对不会工作。 (2认同)