更新 UINavigationBar 颜色只应用一种色调,不知道为什么?
Updating the UINavigationBar color only applies a tint, not sure why?
所以....我有很多代码,在视图的初始化中,我更改了 UINavigationBar:
struct ContentView: View {
init() {
UINavigationBar.appearance().backgroundColor = .black
}
var body: some View {
NavigationView {
VStack {
Text("Test")
}.navigationBarTitle("TestBarTitle", displayMode: .inline)
}
}
}
出于某种原因,这只会使栏显示为灰色(几乎就像它应用了透明的黑色滤镜一样)。我不确定,但我认为一定有一些代码搞乱了这个导航栏的变化。这可能是什么原因造成的?我希望导航栏真的是黑色的。
旁注:当我删除 displayMode: .inline 时,导航栏显示为纯色而不是透明的...如何按照 displayMode: .inline 提供的方式维护导航栏设置?
我们可以创建一个名为“.navigationBarColor()”的自定义修饰符并像这样使用它:
struct ContentView: View {
var body: some View {
NavigationView {
VStack {
Text("Test")
}
.navigationBarTitle("TestBarTitle", displayMode: .inline)
.navigationBarColor(.black)
}
}
}
将此添加到您的 ContentView 文件中:
struct NavigationBarModifier: ViewModifier {
var backgroundColor: UIColor?
init( backgroundColor: UIColor?) {
self.backgroundColor = backgroundColor
let coloredAppearance = UINavigationBarAppearance()
coloredAppearance.configureWithTransparentBackground()
coloredAppearance.backgroundColor = .clear
coloredAppearance.titleTextAttributes = [.foregroundColor: UIColor.white]
coloredAppearance.largeTitleTextAttributes = [.foregroundColor: UIColor.white]
UINavigationBar.appearance().standardAppearance = coloredAppearance
UINavigationBar.appearance().compactAppearance = coloredAppearance
UINavigationBar.appearance().scrollEdgeAppearance = coloredAppearance
UINavigationBar.appearance().tintColor = .white
}
func body(content: Content) -> some View {
ZStack{
content
VStack {
GeometryReader { geometry in
Color(self.backgroundColor ?? .clear)
.frame(height: geometry.safeAreaInsets.top)
.edgesIgnoringSafeArea(.top)
Spacer()
}
}
}
}
}
extension View {
func navigationBarColor(_ backgroundColor: UIColor?) -> some View {
self.modifier(NavigationBarModifier(backgroundColor: backgroundColor))
}
}
查看这篇发布于 2020 年 3 月 10 日的文章。
https://filipmolcik.com/navigationview-dynamic-background-color-in-swiftui/
所以....我有很多代码,在视图的初始化中,我更改了 UINavigationBar:
struct ContentView: View {
init() {
UINavigationBar.appearance().backgroundColor = .black
}
var body: some View {
NavigationView {
VStack {
Text("Test")
}.navigationBarTitle("TestBarTitle", displayMode: .inline)
}
}
}
出于某种原因,这只会使栏显示为灰色(几乎就像它应用了透明的黑色滤镜一样)。我不确定,但我认为一定有一些代码搞乱了这个导航栏的变化。这可能是什么原因造成的?我希望导航栏真的是黑色的。
旁注:当我删除 displayMode: .inline 时,导航栏显示为纯色而不是透明的...如何按照 displayMode: .inline 提供的方式维护导航栏设置?
我们可以创建一个名为“.navigationBarColor()”的自定义修饰符并像这样使用它:
struct ContentView: View {
var body: some View {
NavigationView {
VStack {
Text("Test")
}
.navigationBarTitle("TestBarTitle", displayMode: .inline)
.navigationBarColor(.black)
}
}
}
将此添加到您的 ContentView 文件中:
struct NavigationBarModifier: ViewModifier {
var backgroundColor: UIColor?
init( backgroundColor: UIColor?) {
self.backgroundColor = backgroundColor
let coloredAppearance = UINavigationBarAppearance()
coloredAppearance.configureWithTransparentBackground()
coloredAppearance.backgroundColor = .clear
coloredAppearance.titleTextAttributes = [.foregroundColor: UIColor.white]
coloredAppearance.largeTitleTextAttributes = [.foregroundColor: UIColor.white]
UINavigationBar.appearance().standardAppearance = coloredAppearance
UINavigationBar.appearance().compactAppearance = coloredAppearance
UINavigationBar.appearance().scrollEdgeAppearance = coloredAppearance
UINavigationBar.appearance().tintColor = .white
}
func body(content: Content) -> some View {
ZStack{
content
VStack {
GeometryReader { geometry in
Color(self.backgroundColor ?? .clear)
.frame(height: geometry.safeAreaInsets.top)
.edgesIgnoringSafeArea(.top)
Spacer()
}
}
}
}
}
extension View {
func navigationBarColor(_ backgroundColor: UIColor?) -> some View {
self.modifier(NavigationBarModifier(backgroundColor: backgroundColor))
}
}
查看这篇发布于 2020 年 3 月 10 日的文章。
https://filipmolcik.com/navigationview-dynamic-background-color-in-swiftui/