最近,我一直在使用新的SwiftUI框架。
我确实对框架的工作原理有基本的了解,但是我无法找到一种方法来更改导航栏的标题属性。
我正在使用最新的Xcode 11 beta 5和相应的swift / swiftUI版本
我已经尝试了一些方法。 我试图做的第一件事就是只向文本添加修饰符,但是以某种方式,SwiftUI似乎会忽略导航栏环境中的修饰符。
我尝试的第二件事是通过UINavigationBar.apperance().titleTextAttributes = ...
但似乎他们取消了在最新的Beta版本中自定义UINavigationBar的titleTextAttributes的功能。
//First thing:
List(myData) {
...
}
.navigationBarTitle(Text("My title").font(myFont))
// Second thing
UINavigationBar.appearance().titleTextAttributes = myAttrs
我希望导航栏标题具有我的自定义字体,但它始终是Apple的默认字体。
答案 0 :(得分:2)
在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(Text("Dashboard").font(.subheadline), displayMode: .large)
//.navigationBarTitle (Text("Dashboard"), displayMode: .inline)
}
}
}
我希望这会对您有所帮助。谢谢!
答案 1 :(得分:1)
我让它工作正常。
我将它存储在 @main 结构(iOS 14)中,我发现它比视图中的 init() 更清晰。
extension UINavigationController {
override open func viewDidLoad() {
super.viewDidLoad()
let appearance = UINavigationBarAppearance()
appearance.configureWithOpaqueBackground()
appearance.titleTextAttributes = [.foregroundColor: UIColor.white]
appearance.largeTitleTextAttributes = [.foregroundColor: UIColor .white]
appearance.largeTitleTextAttributes = [.font : UIFont(name: "OfficinaSans", size: 30)!]
appearance.titleTextAttributes = [ .font : UIFont(name: "OfficinaSans", size: 20)!]
appearance.shadowColor = .white
navigationBar.standardAppearance = appearance
navigationBar.compactAppearance = appearance
navigationBar.scrollEdgeAppearance = appearance
}
}