我想要将视图1的导航标题的 colored颜色 更改为绿色,而不更改视图2的导航标题的 colored颜色 .我看了看this question,实现了完全改变 colored颜色 ,但这并不完全是我需要的.在SwiftUI中,有没有一种方法可以只更改特定视图的NavigationTitle的 colored颜色 ,而不是更改整个NavigationView的 colored颜色 ?

以下是我的代码:

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相关问答推荐

SwiftUI@Observable不跟踪父类属性中的更改以更新视图

以编程方式更改VC&39;S导航栏按钮的属性,以响应另一个VC中的按钮按下

如何在HStack中将sfsymbol与Text视图对齐?

SwiftData共享扩展阻止应用程序打开SQLite文件

一对多关系 Firebase 实时数据库(嵌入数百万条 comments )

PropertyWrapper 不存在的 Codable 属性的默认值

如何在swiftui中更改可搜索的搜索图标 colored颜色

用溢出的长文本对齐 Flutter 中的行和列

类型任何视图不能符合具有泛型的协议上的视图

JSONDecoder 在模拟器上运行良好时无法在真实设备上解码

向标签栏控制器添加新标签

interfaceOrientation在 iOS 8 中已弃用,如何更改此方法 Objective C

如何在react 导航中获取当前路由名称?

故事板中的 colored颜色 与 UIColor 不匹配

将 iPhone xib 转换为 iPad xib?

~= Swift 中的运算符

用户拒绝使用后如何提示用户打开位置服务

Sierra 中的安全/协同设计: keys 串忽略访问控制设置和 UI 提示权限

UICollectionView flowLayout 没有正确包装单元格

ARC - __unsafe_unretained 的含义?