【问题标题】:How do I change text attributes for a navigation bar title in SwiftUI?如何在 SwiftUI 中更改导航栏标题的文本属性?
【发布时间】:2019-08-06 06:30:09
【问题描述】:

最近,我一直在玩新的 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

我希望导航栏标题有我的自定义字体,但它始终是苹果默认字体。

【问题讨论】:

  • 谢谢!我在 .onAppear() 修饰符中尝试过。

标签: ios uikit swiftui


【解决方案1】:

在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)
        }
    }
}

我希望这会对你有所帮助。谢谢!!

【讨论】:

    【解决方案2】:

    我让这个工作正常。

    我将它存储在 @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
             
        }
        
    }
    

    【讨论】:

    • 在几十个重复的问题和答案中,这是唯一适用于 iOS 14.5 的方法。视图初始化不起作用,而且很恶心。也就是说,您可能希望编辑 w/standard 和 scrollEdge/Compact 被分成不同的字体大小。
    • 可以但是 - 我的应用程序只是纵向的,所以我没有打扰。很高兴它有帮助。
    • 让我们交换生命?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-23
    相关资源
    最近更新 更多