我在UINavigationController中嵌入了一个UITableView和一个Detail View,如下所示:我想打开“我的笔记”的大标题,但我想关闭它的详细视图。类似于iPhone上默认的邮件应用程序的工作方式。在此过程中,我如何更改导航栏的prefersLargeTitle属性?
prefersLargeTitle
b4lqfgs41#
很简单。在您的DetailView中,需要将navigationItem.largeTitleDisplayMode设置为**.never**(notnavigationController?.navigationItem.largeTitleDisplayMode!!)
navigationItem.largeTitleDisplayMode = .never
aoyhnmkz2#
.navigationBarTitle("Title", displayMode: .inline)
更新iOS 14及更高版本:
.navigationTitle("Details") .navigationBarTitleDisplayMode(.inline)
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
prefersLargeTitles
如果它的值为true,则将启用大标题模式
self.navigationController?.navigationBar.prefersLargeTitles = true
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 }
我希望能帮助到别人。
yzuktlbb5#
需要注意的是,如果您在ViewController的细节上将largeTitleDisplayMode设置为never,并将prefersLargeTitles设置为false,则当通过UINavigationBar后退按钮从ViewController的细节移动到上一个ViewController时,小标题将继续显示一秒钟。使用willMove(toParent:)函数在执行segue之前将标题改回来。
ViewController
largeTitleDisplayMode
UINavigationBar
willMove(toParent:)
override func willMove(toParent parent: UIViewController?) { navigationItem.largeTitleDisplayMode = .always navigationController?.navigationBar.prefersLargeTitles = true }
vyswwuz26#
if #available(iOS 11.0, *) { self.navigationItem.largeTitleDisplayMode = UINavigationItem.LargeTitleDisplayMode.never } else { // Fallback on earlier versions }
lrl1mhuk7#
可能很晚了,但这对某人可能有用。在详细视图控制器的viewDidLoad下包含以下代码
lnlaulya8#
SwiftUI:
步骤1.使用ZStack步骤2:.navigationBarTitle(“",displayMode:.inline)
ej83mcc09#
我遇到了同样的问题,需要在第二个ViewController的故事板上放置一个NavigationItem。我的NavigationItem是由segue自动创建的,并且在视图出现之前,它在viewDidLoad()中的prefersLargeTitle没有完成加载。向故事板添加NavigationItem解决了这个问题,并允许我在故事板的属性菜单中设置prefersLargeTitle。
viewDidLoad()
9条答案
按热度按时间b4lqfgs41#
很简单。
在您的DetailView中,需要将navigationItem.largeTitleDisplayMode设置为**.never**
(notnavigationController?.navigationItem.largeTitleDisplayMode!!)
aoyhnmkz2#
SwiftUI版本
更新iOS 14及更高版本:
uttx8gqw3#
以下两种方法中的任何一种都可以解决您的问题:
1.将导航栏的prefersLargeTitles设置为false
1.将navigationItem的largeTitleDisplayMode设置为never(注意:prefersLargeTitles必须为false,否则将不起作用)
注意:如果
prefersLargeTitles
为true,则largeTitleDisplayMode = .never不起作用,导航栏的小标题显示依赖于prefersLargeTitles
如果它的值为true,则将启用大标题模式
9nvpjoqh4#
我刚才也遇到了同样的问题。
我的用例:
**MasterVC:**不带largeTitle的基本导航栏
**DetailVC:**largeTitle已启用
--〉当从DetailVC返回到MasterVC时,我看到一个奇怪的动画,在返回到基本的非largeTitle布局之前,它在Master上显示了一个largeTitle。它看起来像一个小故障。
我通过以下方法修复了它:
在MasterVC中-viewDidLoad
详细VC-viewDidLoad
我希望能帮助到别人。
yzuktlbb5#
需要注意的是,如果您在
ViewController
的细节上将largeTitleDisplayMode
设置为never,并将prefersLargeTitles
设置为false,则当通过UINavigationBar
后退按钮从ViewController
的细节移动到上一个ViewController
时,小标题将继续显示一秒钟。使用
willMove(toParent:)
函数在执行segue之前将标题改回来。Swift 4
vyswwuz26#
lrl1mhuk7#
可能很晚了,但这对某人可能有用。
在详细视图控制器的viewDidLoad下包含以下代码
lnlaulya8#
SwiftUI:
步骤1.使用ZStack步骤2:.navigationBarTitle(“",displayMode:.inline)
ej83mcc09#
我遇到了同样的问题,需要在第二个ViewController的故事板上放置一个NavigationItem。我的NavigationItem是由segue自动创建的,并且在视图出现之前,它在
viewDidLoad()
中的prefersLargeTitle
没有完成加载。向故事板添加NavigationItem解决了这个问题,并允许我在故事板的属性菜单中设置prefersLargeTitle
。