【问题标题】:Style first character in NavigationBar title in SwiftUI在 SwiftUI 中为 NavigationBar 标题中的第一个字符设置样式
【发布时间】:2022-01-27 04:22:25
【问题描述】:

我正在尝试像这样更改 SwiftUI 中第一个字符的字体颜色

但是当我运行应用程序时,我收到警告说Only unstyled text can be used with navigationTitle(_:),并且文本显示为黑色。由于我不想更改整个字体 - 更改导航栏的字体颜色不是一种选择。是制作自定义 NavigationBar 的唯一方法吗?

该应用的最低要求是 iOS 14。

这是我目前正在尝试的解决方案……但随后整个标题变成黑色,因为不允许使用样式文本。

let titleToSet = (Text("M").foregroundColor(Color.red) + Text("y page")

NavigationView {
            contentView()
            .navigationTitle(titleToSet)
}

【问题讨论】:

  • 这需要Minimal, Reproducible Example。请显示足够的代码来运行并显示此错误。
  • 一些代码会有所帮助,如上面的评论中所述。此外,在我看来,它甚至不像原生的 NavigationView 和标题,但也许是因为字体?
  • 我已经用一些代码更新了这个问题,并且我目前正在尝试解决方案

标签: swiftui fonts navigationbar


【解决方案1】:

您可以在.toolbar 中放置您想要的任何类型的视图。它不一定是一个按钮。您可以滚动自己的标题视图。所以,这只会留下视图本身。如果您只想将第一个字母变为红色,那么创建此视图的最简单方法是在从剩余的标题文本中删除第一个字母之后连接您的文本。

struct ToolBarStyledText: View {
    var body: some View {
        Text("Hello, World!")
            .toolbar {
                ToolbarItem(placement: .navigationBarLeading) {
                    TitleView("My page")
                }
                ToolbarItem(placement: .navigationBarTrailing) {
                    Image(systemName: "person.circle")
                }
            }
    }
}

struct TitleView: View {
    let firstLetter: String
    let remainingText: String
    
    init(_ title: String) {
        var text = title
        if !text.isEmpty {
            firstLetter = String(text.removeFirst())
            remainingText = text
        } else {
            firstLetter = ""
            remainingText = ""
        }
    }
    
    var body: some View {
        Text(firstLetter).foregroundColor(.red).bold() + Text(remainingText).bold()
    }
}

【讨论】:

  • 这很好用......不幸的是,你失去了使用滚动时移动的大导航标题的可能性:(
  • 你将不得不选择你的妥协。但是,这是对所提问题的适当回答。
猜你喜欢
  • 2020-02-18
  • 1970-01-01
  • 2021-10-15
  • 2020-07-09
  • 1970-01-01
  • 2016-11-11
  • 2013-12-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多