ios 如何关闭UINavigationBar的大标题?

hmmo2u0o  于 2023-04-22  发布在  iOS
关注(0)|答案(9)|浏览(306)

我在UINavigationController中嵌入了一个UITableView和一个Detail View,如下所示:

我想打开“我的笔记”的大标题,但我想关闭它的详细视图。类似于iPhone上默认的邮件应用程序的工作方式。在此过程中,我如何更改导航栏的prefersLargeTitle属性?

b4lqfgs4

b4lqfgs41#

很简单。
在您的DetailView中,需要将navigationItem.largeTitleDisplayMode设置为**.never**
(notnavigationController?.navigationItem.largeTitleDisplayMode!!)

navigationItem.largeTitleDisplayMode = .never
aoyhnmkz

aoyhnmkz2#

SwiftUI版本

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

更新iOS 14及更高版本:

.navigationTitle("Details")
.navigationBarTitleDisplayMode(.inline)
uttx8gqw

uttx8gqw3#

以下两种方法中的任何一种都可以解决您的问题:
1.将导航栏的prefersLargeTitles设置为false

self.navigationController?.navigationBar.prefersLargeTitles = false

1.将navigationItem的largeTitleDisplayMode设置为never(注意:prefersLargeTitles必须为false,否则将不起作用)

self.navigationController?.navigationItem.largeTitleDisplayMode = .never

注意:如果prefersLargeTitles为true,则largeTitleDisplayMode = .never不起作用,导航栏的小标题显示依赖于prefersLargeTitles

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

self.navigationController?.navigationBar.prefersLargeTitles = true
9nvpjoqh

9nvpjoqh4#

我刚才也遇到了同样的问题。
我的用例:

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

我希望能帮助到别人。

yzuktlbb

yzuktlbb5#

需要注意的是,如果您在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
}
vyswwuz2

vyswwuz26#

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

lrl1mhuk7#

可能很晚了,但这对某人可能有用。
在详细视图控制器的viewDidLoad下包含以下代码

navigationItem.largeTitleDisplayMode = .never
lnlaulya

lnlaulya8#

SwiftUI:

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

ej83mcc0

ej83mcc09#

我遇到了同样的问题,需要在第二个ViewController的故事板上放置一个NavigationItem。我的NavigationItem是由segue自动创建的,并且在视图出现之前,它在viewDidLoad()中的prefersLargeTitle没有完成加载。向故事板添加NavigationItem解决了这个问题,并允许我在故事板的属性菜单中设置prefersLargeTitle

相关问题