Xcode 11では、アプリが実行されているときに、デバッグ領域の下部にある環境オーバーライドを切り替えることで、ダークモードを有効にできます。
SwiftUIには、インターフェースを構築しているときにアプリのライブプレビューを生成するCanvasエディターがあります。
これらのプレビューでダークモードに切り替える方法はありますか?
プレビューされているファイルの下部にこのようなものが表示されます。これは、Xcodeがプレビューを生成するために使用するものです。
#if DEBUG
struct ContentView_Previews : PreviewProvider {
static var previews: some View {
ContentView()
}
}
#endif
プレビューをダークモードに変更するには、colorScheme
を指定するだけです。
static var previews: some View {
ContentView().colorScheme(.dark)
}
または、ライトモードとダークモードを同時にプレビューすることもできます。
static var previews: some View {
Group {
ContentView().colorScheme(.light)
ContentView().colorScheme(.dark)
}
}
SwiftUIのその他の例とプレビューがいかに強力かについては、 Introducing SwiftUI セッションをご覧になることをお勧めします。
注:執筆時点では、.environment(.colorScheme、.dark)が機能するためには、最上位のビューとしてNavigationViewが必要です。しかし、(大きな)ナビゲーションバーはカラーブロックをカバーしているため、2つのnavigationBarモディファイアによってバーが小さくなり、非表示になります。これはXcodeのバグの可能性があります。
これをXcode 11.2.1でテストしましたが、NavigationView
の問題はまだ残っています。ビュー全体をNavigationView
でラップしない限り、環境は変化していないようです。 .navigationBarTitle("")
&.navigationBarHidden(true)
を使用してNavigationView
を非表示にできます。
例:
struct ContentView: View {
var body: some View {
NavigationView {
Text("Light vs Dark Mode")
// Uncomment these lines if you don't want the navigation bar
// .navigationBarTitle("")
// .navigationBarHidden(true)
// You can also apply a colorScheme here
// which will impact how the view looks when the app
// is launched on device. Regardless of the users theme settings
}// .environment(\.colorScheme, .dark)
}
}
struct ContentView_Previews: PreviewProvider {
static var previews: some View {
// ContentView().environment(\.colorScheme, .dark)
// ContentView().environment(\.colorScheme, .light)
// If you want you can display both schemes in a group
Group {
ContentView()
.environment(\.colorScheme, .light)
ContentView()
.environment(\.colorScheme, .dark)
}
}
}
ダークモードでのサンプルプレビュー: