gpt4 book ai didi

ios - 如何仅更改一个 View 的 navigationTitle 颜色?

转载 作者:行者123 更新时间:2023-12-05 04:25:33 24 4
gpt4 key购买 nike

我想将 View1 的 navigationTitle 的颜色更改为绿色,而不更改 View2 的 navigationTitle 的颜色。我看了this question并完全改变了颜色,但这并不是我所需要的。在 SwiftUI 中有没有办法只更改特定 View 的 navigationTitle 的颜色而不是整个 NavigationView?

这是我的代码:

struct View1: View {
// copied from the question I mentioned above
init() {
let navbarAppearance = UINavigationBarAppearance()
navbarAppearance.largeTitleTextAttributes = [.foregroundColor: UIColor.green]
navbarAppearance.titleTextAttributes = [.foregroundColor: UIColor.green]
navbarAppearance.configureWithTransparentBackground()
UINavigationBar.appearance().standardAppearance = navbarAppearance
UINavigationBar.appearance().compactAppearance = navbarAppearance
UINavigationBar.appearance().scrollEdgeAppearance = navbarAppearance
}

var body: some View {
NavigationView{
NavigationLink(
destination: View2())
{
Text("go to view 2")
}
.navigationTitle("View1")
}
}
}

struct View2: View {
var body: some View {
Text("view2")
.navigationTitle("View2")
}
}

感谢任何帮助,非常感谢!

最佳答案

link可能会有帮助。有解决办法:

struct View1: View {
var body: some View {
NavigationView{
ZStack {
NavigationControllerAccessor(viewWillAppear: { nav in
nav.navigationBar.largeTitleTextAttributes = [
.foregroundColor: UIColor.green
]
}, viewWillDisappear: { nav in
nav.navigationBar.largeTitleTextAttributes = nil
})

NavigationLink(
destination: View2())
{
Text("go to view 2")
}
}
.navigationTitle("View1")

}
// This is important, it doesn't work without it.
.navigationViewStyle(.stack)
}
}

struct View2: View {
var body: some View {
Text("view2")
.navigationTitle("View2")
}
}

struct NavigationControllerAccessor: UIViewControllerRepresentable {
var viewWillAppear: (UINavigationController) -> Void
var viewWillDisappear: ((UINavigationController) -> Void)? = nil

private let proxyController = ViewController()

func makeUIViewController(context: UIViewControllerRepresentableContext<NavigationControllerAccessor>) -> UIViewController {
proxyController.viewWillAppearCallback = viewWillAppear
if let viewWillDisappear = viewWillDisappear {
proxyController.viewWillDisappearCallback = viewWillDisappear
}
return proxyController
}

func updateUIViewController(_ uiViewController: UIViewController, context: UIViewControllerRepresentableContext<NavigationControllerAccessor>) {}

private class ViewController: UIViewController {
var viewWillAppearCallback: (UINavigationController) -> Void = { _ in }
var viewWillDisappearCallback: (UINavigationController) -> Void = { _ in }

override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
if let nav = navigationController {
viewWillAppearCallback(nav)
}
}

override func viewWillDisappear(_ animated: Bool) {
super.viewWillDisappear(animated)
if let nav = navigationController {
viewWillDisappearCallback(nav)
}
}
}
}

关于ios - 如何仅更改一个 View 的 navigationTitle 颜色?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73214030/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com