NavigationView {
TopLevelView {
// […]
}
.navigationBarTitleDisplayMode(.inline) // ⬅️ Important part
}
SwiftUI的navigationBarTitle
修饰符具有一个可选的displayMode
属性,您可以将其设置为.inline
以用于小标题,或者.large
以用于大标题。查看文档
NavigationView {
TopLevelView {
// […]
}
.navigationBarTitle("Test", displayMode: .inline) // ⬅️ Important part
}
自iOS 11以来,UINavigationBar
可以以标准和大标题模式显示其标题。
在UIKit中,如果您想在这两种行为之间进行选择,您需要设置视图控制器的navigationItem
的largeTitleDisplayMode
属性,以决定该特定视图控制器是否应显示大标题。
然后,您需要检查导航控制器的navigationBar
的prefersLargeTitle
属性。将其设置为true
将允许其导航堆栈中的视图控制器显示大标题。相反,将其设置为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
在导航栈中的根视图上使用修饰符navigationBarTitleDisplayMode(:)
。
最强大的方法是创建一个带有默认值.large
的自定义方法。为此,您需要一个View
扩展。继续使用navigationBarTitle()
修饰符,并与其一起使用您自己的修饰符。如果您不需要默认值,请改用.inline
。
import SwiftUI
extension View {
func barTitle(_ title: String,
size: NavigationBarItem.TitleDisplayMode = .large) -> some View {
self.navigationBarTitle(title, displayMode: size)
}
}
struct Benchmark: Identifiable, Hashable {
let id = UUID()
var name: String
}
NavigationStack
的新实体。 NavigationStack 是一个视图,它显示一个根视图并允许您在根视图上呈现其他视图。
struct OilView: View {
var benchmarks: [Benchmark] = [ .init(name: "WTI"), .init(name: "Brent"),
.init(name: "Urals"), .init(name: "OPEC") ]
var body: some View {
NavigationStack {
List(benchmarks) { benchmark in
NavigationLink(benchmark.name, value: benchmark)
}
.navigationDestination(for: Benchmark.self) { crudeOil in
if crudeOil.name == "WTI" || crudeOil.name == "Brent" {
Text("Light and Sweet")
.font(.title2)
.barTitle(crudeOil.name) // default `.large` value
} else if crudeOil.name == "Urals" || crudeOil.name == "OPEC" {
Text("Heavy and Sour")
.font(.title2)
.barTitle(crudeOil.name, size: .inline)
}
}
}
.navigationBarTitle("Benchmarks", displayMode: .large)
}
}
.navigationBarTitle(displayMode:)
已被弃用,在Xcode 12.0 beta 6中似乎无法工作。-_- 有一个新的方法navigationBarTitleDisplayMode(_ displayMode:)
,但只适用于iOS 14及以上版本。 - NatanelText
中,这样它应该可以工作。 - Natanel