如何将 SwiftUI 中的 NavigationView 的标题设置为大标题(或小标题)?

Pom*_*ule 14 uinavigationcontroller ios swift swiftui

使用 SwiftUI 如何更改导航栏的标题大小?在标准或大标题之间进行选择。

大标题和标准(内联)标题之间的区别

Pom*_*ule 28

SwiftUI (Xcode 11.3)

SwiftUInavigationBarTitle修饰符有一个可选displayMode属性,您可以将其设置为小标题.inline.large大标题。查看文档

NavigationView {
    TopLevelView {
        // […]
    }
    .navigationBarTitle("Test", displayMode: .inline) // ?? Important part
}
Run Code Online (Sandbox Code Playgroud)

它是如何在 UIKit 中完成的

从 iOS 11 开始,UINavigationBar可以在标准和大标题模式下显示其标题。

UIKit 上,如果你想在这两种行为之间进行选择,你必须设置largeTitleDisplayMode你的 ViewController 的属性navigationItem来决定这个特定的视图控制器是否应该显示一个大标题。

然后,您需要检查prefersLargeTitle导航控制器的navigationBar. 将其设置为true将允许其导航堆栈中的 ViewController 显示大标题。相反,将其设置为false将阻止它,覆盖堆栈中存在的各个 NavigationItems 的首选项。

这将在 UIKit 中显示一个大标题

// Set this property to true to allow NavigationItems to display large titles
let navigationController = UINavigationController()
navigationController.navigationBar.prefersLargeTitles = true

/*
 Choose between `always`, `never` and `automatic` to decide
 if this particular view controller should display a large title.
 */
let viewController = UIViewController()
viewController.navigationItem.largeTitleDisplayMode = .always
Run Code Online (Sandbox Code Playgroud)

  • `.navigationBarTitle(displayMode:)` 已被弃用,并且似乎无法在 Xcode 12.0 beta 6 中工作。-_- 有一种新方法 `navigationBarTitleDisplayMode(_ displayMode:)` 但仅适用于 iOS 14 及更高版本。 (2认同)
  • @GonçaloGaspar 我意识到你需要做的就是将标题字符串包装在“Text”中,它应该可以工作。 (2认同)

Mat*_*ros 5

适用于 iOS 14 及更高版本

navigationBarTitleDisplayMode(:)在导航堆栈中的根视图上使用修饰符。