【SwiftUI】Widgetのpreviewについて

SwiftUI

SwiftUIのpreview機能ではWidgetのプレビューも可能です。
各種WidgetFamilyをそれぞれプレビュー出来るので気軽に確認しながら作成できます。

プレビュー方法

Widgetを追加した際に以下のようなコードが追加されます。

struct WidgetTest_Widget_Previews: PreviewProvider {
    static var previews: some View {
        WidgetTest_WidgetEntryView(entry: SimpleEntry(date: Date()))
            .previewContext(WidgetPreviewContext(family: .systemSmall))
    }
}

通常のアプリと同じようにpreviewのコードを使用する事ができます。

まず注目すべき点の1つ目は、あくまでWidget内のViewをpreviewしている事です。
Widgetを継承した構造体自体をpreviewしている訳ではありません。
その分、中のViewを個別にpreview出来るようになっています。

次にpreviewContextです。
ここでWidgetPreviewContextでWidgetFamilyを指定します。
これで好きなWidgetFamilyのpreviewができます。
なおViewファイルを分割した際にはimport WidgetKitを忘れないようにして下さい。

ロック画面のWidgetも確認出来るので非常に便利です。
また、複数のViewを書く事でタブを切り替える様にしてpreviewを切り替えられます。

struct WidgetTest_Widget_Previews: PreviewProvider {
    static var previews: some View {
        WidgetTest_WidgetEntryView(entry: SimpleEntry(date: Date()))
            .previewContext(WidgetPreviewContext(family: .systemSmall))

        WidgetTest_WidgetEntryView(entry: SimpleEntry(date: Date()))
            .previewContext(WidgetPreviewContext(family: .accessoryRectangular))
    }
}

余談

色々と試しているうちにWidgetPreviewContextで指定したWidgetFamilyと、
実行されるWidgetFamilyが異なる場合はありました。

Widgetのサイズは指定したものになりますが、
environment変数は異なる値を示していました。

Xcodeの再起動で直りましたので参考までに。

コメント

タイトルとURLをコピーしました