我正在使用Xcode 11中的SwiftUI,我想用以下代码更改NavigationBarTitle
字体:
.navigationBarTitle (Text("Navigation Bar Title"), displayMode: .inline)
.font(.subheadline)
但是什么都没有发生。有任何建议或评论吗?
我正在使用Xcode 11中的SwiftUI,我想用以下代码更改NavigationBarTitle
字体:
.navigationBarTitle (Text("Navigation Bar Title"), displayMode: .inline)
.font(.subheadline)
但是什么都没有发生。有任何建议或评论吗?
在SwiftUI中,目前我们无法直接更改navigationBarTitle
字体,但您可以通过以下方式更改navigationBar的外观:
struct YourView: View {
init() {
//Use this if NavigationBarTitle is with Large Font
//UINavigationBar.appearance().largeTitleTextAttributes = [.font : UIFont(name: "Georgia-Bold", size: 20)!]
//Use this if NavigationBarTitle is with displayMode = .inline
UINavigationBar.appearance().titleTextAttributes = [.font : UIFont(name: "Georgia-Bold", size: 20)!]
}
var body: some View {
NavigationView {
Text("Hello World!")
//.navigationBarTitle("TEST")
.navigationBarTitle (Text("TEST"), displayMode: .inline)
}
}
}
我希望它能对你有所帮助。谢谢!!
目前还无法使用.font
修饰符更改navigationBarTitle
的字体(已在Xcode 11-Beta2中测试)。
但是,您可以构建自己的自定义navigationBarView
,并完全访问其任何子视图,如下所示:
struct NavigationBarView: View {
var body: some View {
VStack(spacing: 0) {
Rectangle()
.foregroundColor(Style.Color.navigationBarColor)
.edgesIgnoringSafeArea(.top)
.frame(height: 0)
Rectangle()
.foregroundColor(Style.Color.navigationBarColor)
.frame(height: 64)
.overlay(
HStack() {
Image("close")
Spacer()
Text("سفر به سلامت")
.font(Style.Font.navigationTitle)
.color(Style.Color.darkTextColor)
.multilineTextAlignment(.center)
Spacer()
Image("menu")
}
)
Spacer()
}
.edgesIgnoringSafeArea(.horizontal)
}
}
LargeTitleStyle
。我认为你需要创建一个NavigationBarBuilder。
struct NavigationBarBuilder: UIViewControllerRepresentable {
var build: (UINavigationController) -> Void = { _ in }
func makeUIViewController(context: UIViewControllerRepresentableContext<NavigationBarBuilder>) -> UIViewController {
UIViewController()
}
func updateUIViewController(_ uiViewController: UIViewController, context: UIViewControllerRepresentableContext<NavigationBarBuilder>) {
if let navigationController = uiViewController.navigationController{
self.build(navigationController)
}
}
}
你可以在你的内容视图中使用它。
struct ContentView: View {
var body: some View {
NavigationView {
Text("")
.navigationBarTitle("Türkiye", displayMode: .inline)
.background(NavigationBarBuilder {navigationController in
navigationController.navigationBar.barTintColor = .red
navigationController.navigationBar.titleTextAttributes = [.foregroundColor: UIColor.white]
})
}
.navigationViewStyle(StackNavigationViewStyle())
}
}
祝你好运...
init () {
UINavigationBar.appearance().largeTitleTextAttributes = [.font : UIFont(name: "Georgia", size: 20)!]
// OR
UINavigationBar.appearance().largeTitleTextAttributes = [.font:UIFont.preferredFont(forTextStyle:.text-style)]
}
在UIFont.TextStyle文档中可以找到.text-style,例如。
.caption
.body
.title1
.title2
.title3
etc
更新1(回答评论区关于精确代码的问题)
struct ContentView: View {
init () {
let paragraph = NSMutableParagraphStyle()
paragraph.alignment = .center
UINavigationBar.appearance().largeTitleTextAttributes = [.font:UIFont.preferredFont(forTextStyle:.title2),
.foregroundColor:UIColor.systemBlue,
.paragraphStyle: paragraph
]
然后在主体部分我有这个。你可能需要注意displayMode参数。
// Body is in the same ContentView struct. Settings from init will be used in navigationBarTitle
// listView() is just a custom function returning a SwiftUI's List()
var body: some View {
NavigationView {
listView()
.navigationBarTitle(
Text(self.accts.selCount <= 0 ? "Accounts" : "\(self.accts.selCount) selected")
,
displayMode:.large)
let appearance = UINavigationBarAppearance()
appearance.titleTextAttributes = [.font : UIFont(name: "Georgia-Bold", size: 20)!]
NavigationView { // <1>
Text("Hello, SwiftUI!")
.navigationBarTitleDisplayMode(.inline)
.toolbar { // <2>
ToolbarItem(placement: .principal) { // <3>
VStack {
Text("Title").font(.headline)
Text("Subtitle").font(.subheadline)
}
}
}
}