如何使用 SwiftUI 中的 navigationBarLeading 位置更改 ToolbarItem 的颜色

Iho*_*ovk 4 toolbar swiftui

我需要一个标题位于导航栏的左侧。我使用以下代码:

.toolbar {
    ToolbarItem(placement: .navigationBarLeading) {
        Text("Title")
            .foregroundColor(.black)
    }
}
Run Code Online (Sandbox Code Playgroud)

问题是它显示为蓝色并显示为按钮。是否有可能以某种方式将其颜色更改为黑色?foregroundColoraccentColor不工作。另外,我尝试在Text("Title")内部使用禁用按钮。但在那种情况下它显示为灰色。没有颜色,也没有PlainButtonStyle被应用。

paw*_*222 14

默认情况下,如果您添加单个,Text它会显示为Button.

然后,要更改其颜色,您需要设置accentColorNavigationView 的(因为此按钮显示在导航栏中):

struct ContentView: View {
    var body: some View {
        NavigationView {
            Text("Test")
                .toolbar {
                    ToolbarItem(placement: .navigationBarLeading) {
                        Text("Title")
                    }
                }
        }
        .accentColor(.black)
    }
}
Run Code Online (Sandbox Code Playgroud)

如果您不想更改accentColor整个 NavigationView 中的 ,您可以执行以下操作:

NavigationView {
    VStack {
        //...
    }
    .accentColor(.accentColor)
}
.accentColor(.black)
Run Code Online (Sandbox Code Playgroud)

但是,如果您希望它Text表现得像 aText而不是像 aButton您可以使用以下技巧:

ToolbarItem(placement: .navigationBarLeading) {
    HStack {
        Text("Title")
        Text("")
    }
    .foregroundColor(.red)
}
Run Code Online (Sandbox Code Playgroud)


mah*_*han 5

使用自定义样式的空菜单而不是更改重音颜色。

    .toolbar {
         ToolbarItem(placement: .navigationBarTrailing) {
             Menu(content: {
              
             }, label: {
                Text("Hello")
             })
             .menuStyle(RedMenuStyle())
         }
     }



struct RedMenuStyle : MenuStyle {
    func makeBody(configuration: Configuration) -> some View {
        Menu(configuration)
            .font(Font.system(size: 50))
            .foregroundColor(Color.red)
    }
}
Run Code Online (Sandbox Code Playgroud)

如果您只显示文本,请使用 navigationBarItems。

    .navigationBarItems(leading: Text("Hello")
                                 .foregroundColor(Color.red)
                                 .font(Font.system(size: 50)))
Run Code Online (Sandbox Code Playgroud)