如何关闭UINavigationBar的大型游戏?

时间:2017-12-20 14:17:27

标签: ios swift uinavigationcontroller uilabel uinavigationbar

我在UINavigationController中嵌入了一个UITableView和一个Detail View,如下所示:enter image description here我想打开“我的笔记”的大标题,但是我想将其关闭以进行详细视图。类似于默认的Mail应用程序在iPhone上的工作方式。如何在segue期间更改导航栏的prefersLargeTitle属性?

9 个答案:

答案 0 :(得分:4)

以下两者中的任何一个都将解决您的问题:

  1. 为您的navigationBar设置prefersLargeTitles为 false

    self.navigationController?.navigationBar.prefersLargeTitles = false
    
  2. 为navigationItem设置largeTitleDisplayMode为 never (注意:prefersLargeTitles必须 false 否则这不会起作用)

    self.navigationController?.navigationItem.largeTitleDisplayMode = .never
    
  3. 注意:如果prefersLargeTitles为真,那么largeTitleDisplayMode =。则无法工作。导航栏的小标题显示取决于prefersLargeTitles

    如果值为 true

    ,则会启用大型标题模式
    self.navigationController?.navigationBar.prefersLargeTitles = true
    

答案 1 :(得分:3)

我刚才有同样的问题。

我的用例:

MasterVC:没有大标题的基本导航栏

DetailVC:已启用largeTitle

->从DetailVC返回MasterVC时,我看到了一个奇怪的动画,该动画在Master上显示了largeTitle几秒钟,然后又回到了基本的nonlargeTitle布局。看起来像个小故障。

我通过以下方法对其进行了修复:

在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
} 

我希望可以帮助别人。

答案 2 :(得分:3)

这很简单。

在您的 DetailView 中,应将 navigationItem.largeTitleDisplayMode 设置为。从不

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

navigationItem.largeTitleDisplayMode = .never

答案 3 :(得分:1)

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

答案 4 :(得分:1)

请注意,如果您在详细信息largeTitleDisplayMode上将prefersLargeTitles设置为从不,并将ViewController设置为false,则小标题从屏幕上移开时将继续显示一秒钟。通过后退按钮ViewController向上一个ViewController详细UINavigationBar

在执行搜索之前,使用willMove(toParent:)功能将标题改回来。

雨燕4

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

答案 5 :(得分:1)

SwiftUI版本

.navigationBarTitle("Title", displayMode: .inline)

答案 6 :(得分:1)

我遇到了同样的问题,需要在第二个ViewController的故事板上放置NavigationItem。 segue自动创建了我的NavigationItem,并且prefersLargeTitle中的viewDidLoad()在视图出现之前尚未完成加载。在情节提要中添加NavigationItem可以解决此问题,并允许我在情节提要的属性菜单中设置prefersLargeTitle

答案 7 :(得分:1)

步骤 1. 使用 ZStack 第 2 步:.navigationBarTitle("", displayMode: .inline)

答案 8 :(得分:0)

可能已经很晚了,但这对某人可能有用。

在viewDidLoad下的详细信息视图控制器上包含以下代码

navigationItem.largeTitleDisplayMode = .never