1. ホーム
  2. ios

[解決済み] SwiftUIのナビゲーションバータイトルの色を更新

2022-12-21 20:18:37

質問

SwiftUIでナビゲーションバーのタイトルの色を変更する方法

NavigationView {
            List{
                ForEach(0..<15) { item in
                    HStack {
                        Text("Apple")
                            .font(.headline)
                            .fontWeight(.medium)
                            .color(.orange)
                            .lineLimit(1)
                            .multilineTextAlignment(.center)
                            .padding(.leading)
                            .frame(width: 125, height: nil)


                        Text("Apple Infinite Loop. Address: One Infinite Loop Cupertino, CA 95014 (408) 606-5775 ")
                            .font(.subheadline)
                            .fontWeight(.regular)
                            .multilineTextAlignment(.leading)
                            .lineLimit(nil)


                    }
                }
            }
            .navigationBarTitle(Text("TEST")).navigationBarHidden(false).foregroundColor(.orange)
            }

私は .foregroundColor(.orange) で試してみましたが、うまくいきません。

も試してみました。 .navigationBarTitle(Text("TEST").color(.orange))

何か良い方法はありませんか?

どのように解決するのですか?

それは ではありません。 を使用する必要があります。 .appearance() を使う必要はありません。

SwiftUI はナビゲーションのスタイルを直接公開しませんが、それを回避するために UIViewControllerRepresentable . SwiftUIは通常の UINavigationController を使うので、ビューコントローラーはまだ有効な .navigationController プロパティを持つことになります。

struct NavigationConfigurator: UIViewControllerRepresentable {
    var configure: (UINavigationController) -> Void = { _ in }

    func makeUIViewController(context: UIViewControllerRepresentableContext<NavigationConfigurator>) -> UIViewController {
        UIViewController()
    }
    func updateUIViewController(_ uiViewController: UIViewController, context: UIViewControllerRepresentableContext<NavigationConfigurator>) {
        if let nc = uiViewController.navigationController {
            self.configure(nc)
        }
    }

}

そして、それを利用するために

struct ContentView: View {
    var body: some View {
        NavigationView {
            ScrollView {
                Text("Don't use .appearance()!")
            }
            .navigationBarTitle("Try it!", displayMode: .inline)
            .background(NavigationConfigurator { nc in
                nc.navigationBar.barTintColor = .blue
                nc.navigationBar.titleTextAttributes = [.foregroundColor : UIColor.white]
            })
        }
    .navigationViewStyle(StackNavigationViewStyle())
    }
}