非常简单。
在您的DetailView中,您应该将navigationItem.largeTitleDisplayMode设置为.never(而不是navigationController?.navigationItem.largeTitleDisplayMode !!)
navigationItem.largeTitleDisplayMode = .never
.navigationBarTitle("Title", displayMode: .inline)
iOS 14及以上版本更新:
.navigationTitle("Details")
.navigationBarTitleDisplayMode(.inline)
set prefersLargeTitles to false for your navigationBar
self.navigationController?.navigationBar.prefersLargeTitles = false
set largeTitleDisplayMode to never for navigationItem (note: prefersLargeTitles must be false otherwise this won't work)
self.navigationController?.navigationItem.largeTitleDisplayMode = .never
prefersLargeTitles
为 true,则设置 largeTitleDisplayMode = .never 无效。导航栏的小标题显示取决于 prefersLargeTitles
。self.navigationController?.navigationBar.prefersLargeTitles = true
我刚刚遇到了同样的问题。
我的使用情况:
MasterVC: 基本导航栏,没有大标题
DetailVC: 启用了大标题
--> 当从 DetailVC 返回到 MasterVC 时,我看到一个奇怪的动画,在返回到基本非大标题布局之前,在 Master 上显示了一个大标题。它看起来像是一个故障。
我通过以下方法解决了这个问题:
在 MasterVC 中 - viewDidLoad
if #available(iOS 11.0, *) {
navigationItem.largeTitleDisplayMode = .never
navigationController?.navigationBar.prefersLargeTitles = false
}
在 DetailVC 中 - viewDidLoad
if #available(iOS 11.0, *) {
navigationItem.largeTitleDisplayMode = .always
navigationController?.navigationBar.prefersLargeTitles = true
}
我希望这能帮助其他人。
需要注意的是,如果您将largeTitleDisplayMode
设置为never,并在详细ViewController
上将prefersLargeTitles
设置为false,则在通过UINavigationBar
返回按钮从详细ViewController
移动到上一个ViewController
时,小标题仍将显示一秒钟。
使用willMove(toParent:)
函数在执行segue之前将标题更改回来。
override func willMove(toParent parent: UIViewController?) {
navigationItem.largeTitleDisplayMode = .always
navigationController?.navigationBar.prefersLargeTitles = true
}
if #available(iOS 11.0, *) {
self.navigationItem.largeTitleDisplayMode = UINavigationItem.LargeTitleDisplayMode.never
} else {
// Fallback on earlier versions
}
UINavigationItemLargeTitleDisplayModeNever
也可以使用,因为这里的暗示是您无法访问 .never
。@NicolasGrenié 在担心标题栏大小之前,您可能需要考虑一些基本教程。 - Abandoned Cart虽然有点晚了,但这对某些人可能还是有用的...
将以下代码包含在您的详细视图控制器中的viewDidLoad下方:
navigationItem.largeTitleDisplayMode = .never
SwiftUI:
步骤1:使用ZStack 步骤2:.navigationBarTitle(“”,displayMode:.inline)
viewDidLoad()
中的 prefersLargeTitle
在视图出现之前没有完成加载。将 NavigationItem 添加到故事板中解决了这个问题,并允许我在故事板的属性菜单中设置 prefersLargeTitle
。
.navigationBarTitleDisplayMode(.inline)
。此外,导航标题可以使用.navigationTitle("Details")
设置。 - dvp.petrov