如何在SwiftUI中更改导航栏标题的文本属性?

时间:2019-08-06 06:30:09

标签: ios uikit swiftui

最近,我一直在使用新的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的默认字体。

2 个答案:

答案 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
         
    }
    
}