SwiftUIのプレビューでDark modeを確認する

2021年03月09日

Previewでdark modeの確認をする際以下のように書きます

static var previews: some View {
    ContentView().colorScheme(.dark)
}




そのため以下のように定義する事で light mode/dark mode を比較する事が出来ます

static var previews: some View {
    Group {
        ContentView()
            .previewLayout(.fixed(width: 375, height: 100))
            .colorScheme(.light)
            .previewDisplayName("light mode")
        ContentView()
            .previewLayout(.fixed(width: 375, height: 100))
            .colorScheme(.dark)
            .previewDisplayName("dark mode")
    }
}
colorSchemeを使う事でlight mode/dark modeを比較出来るようにする

背景をdark modeのように暗くする

iPhoneでdark modeにすると背景色が黒くなりますが、 .colorScheme(.dark) を指定するだけでは背景色が暗くなりません。


この問題は NavigationView でラップする事で解消します。

static var previews: some View {
    Group {
        NavigationView {
            ContentView()
        }
        .previewLayout(.fixed(width: 375, height: 100))
        .colorScheme(.light)
        .previewDisplayName("light mode")

        NavigationView {
            ContentView()
        }
        .previewLayout(.fixed(width: 375, height: 100))
        .colorScheme(.dark)
        .previewDisplayName("dark mode")
    }
}
NavigationViewを使う事でdark mode時の背景色を黒く出来る





ただし上記画像のようにnavigationBarとstatusBarの高さがプラスされて表示されてしまうため、
以下のようにnavigationTitleを設定せずに、navigationBarHidden(true)を設定する事で微調整する事が出来ます

static var previews: some View {
    Group {
        NavigationView {
            ContentView()
                .navigationBarTitle("")
                .navigationBarHidden(true)
        }
        .previewLayout(.fixed(width: 375, height: 100))
        .colorScheme(.light)
        .previewDisplayName("light mode")

        NavigationView {
            ContentView()
                .navigationBarTitle("")
                .navigationBarHidden(true)
        }
        .previewLayout(.fixed(width: 375, height: 100))
        .colorScheme(.dark)
        .previewDisplayName("dark mode")
    }
}
NavigationViewのステータスバーを非表示にする事で高さを少しでも低くする

おすすめ