如何更改 NavigationView 后退按钮的颜色
How to change color of back button on NavigationView
当您单击该按钮时,它会将您带到一个新视图并在左上角放置一个后退按钮。我不知道是什么 属性 控制后退按钮的颜色。我尝试添加 accentColor 和 foregroundColor,但它们只能编辑视图内的项目。
var body: some View {
NavigationView {
NavigationLink(destination: ResetPasswordView()) {
Text("Reset Password")
.foregroundColor(Color(red: 0, green: 116 / 255, blue: 217 / 255))
.padding()
}
}
}
您可以尝试将 foregroundColor 或 accentColor 设置为 NavigationView(在倒数第二个右括号之后)
我怀疑这是正确的方法,但我通过修改SceneDelegate.swift设置window色调使它起作用.
func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) {
// Use a UIHostingController as window root view controller
let window = UIWindow(frame: UIScreen.main.bounds)
window.rootViewController = UIHostingController(rootView: ContentView())
window.tintColor = .green // set the colour of the back navigation text
self.window = window
window.makeKeyAndVisible()
}
一段时间以来,我一直在尝试做同样的事情,但认为目前还没有 SwiftUI 解决方案。不过,可以完成工作的其中一件事(如果它适用于您的用例)是 UIKit 的外观:
UINavigationBar.appearance().tintColor = .black
这对我有用:
let navBarAppearance = UINavigationBarAppearance()
navBarAppearance.backButtonAppearance.normal.titleTextAttributes = [.foregroundColor: UIColor.white]
您可以使用 NavigationView 上的 accentColor
属性 来设置后退按钮颜色,如本例所示:
var body: some View {
NavigationView {
List(1..<13) { item in
NavigationLink(destination: Text("\(item) x 8 = \(item*8)")) {
Text(String(item))
}
}.navigationBarTitle("Table of 8")
}.accentColor(.black) // <- note that it's added here and not on the List like navigationBarTitle()
}
.navigationBarBackButtonHidden(true)
.navigationBarItems(leading:
Button(action: {presentation.wrappedValue.dismiss()}, label: {
HStack {
Image(systemName: "chevron.backward")
.foregroundColor(Color(UIColor.darkGray))
Text(username)
.foregroundColor(Color(UIColor.darkGray))
.font(UIHelper.largeSize())
}
})
向 NavigationView 添加 .accentColor 修饰符,如下所示
NavigationView {
Text("Hello World")
.toolbar {
ToolbarItem(placement: .navigationBarLeading) {
Button("Close") { }
}
}
}
.accentColor(.themeColor)
如果您使用的是 XCode12,请考虑在 Assets.xcassets
中设置 AccentColor。 XCode 将为应用中的所有导航后退按钮使用此颜色。
请注意,这也会影响其他 UI 元素。其中之一是按钮。您始终可以使用 accentColor 修饰符覆盖它:
Button("Button With Different Accent Color") {
// do something useful
}
.accentColor(.red)
您好,可能来晚了,但根据之前的回答,我制作了视图修改器,它允许您更改颜色或添加文本。这种方法将避免您在需要后退按钮的任何地方编写样板代码。
import Foundation
import SwiftUI
struct NavigationBackButton: ViewModifier {
@Environment(\.presentationMode) var presentationMode
var color: UIColor
var text: String?
func body(content: Content) -> some View {
return content
.navigationBarBackButtonHidden(true)
.navigationBarItems(
leading: Button(action: { presentationMode.wrappedValue.dismiss() }, label: {
HStack(spacing: 2) {
Image(systemName: "chevron.backward")
.foregroundColor(Color(color))
if let text = text {
Text(text)
.foregroundColor(Color(color))
}
}
})
)
}
}
extension View {
func navigationBackButton(color: UIColor, text: String? = nil) -> some View {
modifier(NavigationBackButton(color: color, text: text))
}
}
而且用法非常简单,只需在导航的目的地视图上使用此修饰符即可 link。
带有文本的后退按钮:
.navigationBackButton(color: .white, text: "Back")
没有文本的后退按钮:
.navigationBackButton(color: .white)
当您单击该按钮时,它会将您带到一个新视图并在左上角放置一个后退按钮。我不知道是什么 属性 控制后退按钮的颜色。我尝试添加 accentColor 和 foregroundColor,但它们只能编辑视图内的项目。
var body: some View {
NavigationView {
NavigationLink(destination: ResetPasswordView()) {
Text("Reset Password")
.foregroundColor(Color(red: 0, green: 116 / 255, blue: 217 / 255))
.padding()
}
}
}
您可以尝试将 foregroundColor 或 accentColor 设置为 NavigationView(在倒数第二个右括号之后)
我怀疑这是正确的方法,但我通过修改SceneDelegate.swift设置window色调使它起作用.
func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) {
// Use a UIHostingController as window root view controller
let window = UIWindow(frame: UIScreen.main.bounds)
window.rootViewController = UIHostingController(rootView: ContentView())
window.tintColor = .green // set the colour of the back navigation text
self.window = window
window.makeKeyAndVisible()
}
一段时间以来,我一直在尝试做同样的事情,但认为目前还没有 SwiftUI 解决方案。不过,可以完成工作的其中一件事(如果它适用于您的用例)是 UIKit 的外观:
UINavigationBar.appearance().tintColor = .black
这对我有用:
let navBarAppearance = UINavigationBarAppearance()
navBarAppearance.backButtonAppearance.normal.titleTextAttributes = [.foregroundColor: UIColor.white]
您可以使用 NavigationView 上的 accentColor
属性 来设置后退按钮颜色,如本例所示:
var body: some View {
NavigationView {
List(1..<13) { item in
NavigationLink(destination: Text("\(item) x 8 = \(item*8)")) {
Text(String(item))
}
}.navigationBarTitle("Table of 8")
}.accentColor(.black) // <- note that it's added here and not on the List like navigationBarTitle()
}
.navigationBarBackButtonHidden(true)
.navigationBarItems(leading:
Button(action: {presentation.wrappedValue.dismiss()}, label: {
HStack {
Image(systemName: "chevron.backward")
.foregroundColor(Color(UIColor.darkGray))
Text(username)
.foregroundColor(Color(UIColor.darkGray))
.font(UIHelper.largeSize())
}
})
向 NavigationView 添加 .accentColor 修饰符,如下所示
NavigationView {
Text("Hello World")
.toolbar {
ToolbarItem(placement: .navigationBarLeading) {
Button("Close") { }
}
}
}
.accentColor(.themeColor)
如果您使用的是 XCode12,请考虑在 Assets.xcassets
中设置 AccentColor。 XCode 将为应用中的所有导航后退按钮使用此颜色。
请注意,这也会影响其他 UI 元素。其中之一是按钮。您始终可以使用 accentColor 修饰符覆盖它:
Button("Button With Different Accent Color") {
// do something useful
}
.accentColor(.red)
您好,可能来晚了,但根据之前的回答,我制作了视图修改器,它允许您更改颜色或添加文本。这种方法将避免您在需要后退按钮的任何地方编写样板代码。
import Foundation
import SwiftUI
struct NavigationBackButton: ViewModifier {
@Environment(\.presentationMode) var presentationMode
var color: UIColor
var text: String?
func body(content: Content) -> some View {
return content
.navigationBarBackButtonHidden(true)
.navigationBarItems(
leading: Button(action: { presentationMode.wrappedValue.dismiss() }, label: {
HStack(spacing: 2) {
Image(systemName: "chevron.backward")
.foregroundColor(Color(color))
if let text = text {
Text(text)
.foregroundColor(Color(color))
}
}
})
)
}
}
extension View {
func navigationBackButton(color: UIColor, text: String? = nil) -> some View {
modifier(NavigationBackButton(color: color, text: text))
}
}
而且用法非常简单,只需在导航的目的地视图上使用此修饰符即可 link。
带有文本的后退按钮:
.navigationBackButton(color: .white, text: "Back")
没有文本的后退按钮:
.navigationBackButton(color: .white)