オンデマンドで SwiftUI ビューの色を変更できるようにする必要があります。これは、View 内のオブジェクトの色をオンデマンドで切り替える場合の問題ではありませんが、NavigationBar の外観プロパティについてはどのように行うことができるのでしょうか? ビューの初期化時にナビゲーション バーの外観を設定する方法を次に示します。ボタンをタップすると、ボタンの色が変わりますが、ナビゲーション バーの外観は変わりません。theme1 に別の値を指定してアプリを再起動すると正しい色が表示されますが、ボタンをタップしてもボタンの色が変わるだけで、NavBar の外観は変わりません。
struct ContentView: View {
@State private var theme1 = true
init() {
let navBarAppearance = UINavigationBarAppearance()
navBarAppearance.titleTextAttributes = [.foregroundColor: theme1 ? UIColor.red : UIColor.yellow]
navBarAppearance.largeTitleTextAttributes = [.foregroundColor: theme1 ? UIColor.red : UIColor.yellow]
navBarAppearance.backgroundColor = theme1 ? UIColor.yellow : UIColor.red
UINavigationBar.appearance().standardAppearance = navBarAppearance
UINavigationBar.appearance().compactAppearance = navBarAppearance
UINavigationBar.appearance().scrollEdgeAppearance = navBarAppearance
UINavigationBar.appearance().tintColor = theme1 ? UIColor.red : UIColor.yellow
}
var body: some View {
NavigationView {
VStack {
Button("Toggle Style") {
theme1.toggle()
}
.padding(8)
.foregroundColor(theme1 ? Color(.red): Color(.yellow))
.background(RoundedRectangle(cornerRadius: 10)
.fill(theme1 ? Color(.yellow) : Color(.red)))
}
.navigationTitle("Theme Picker")
}
}
}