🙌

[SwiftUI]プレビューでNavigationViewも表示して確認する方法

2021/10/26に公開

NavigationViewの遷移先のViewでナビゲーションバーまではプレビューできない

例えばSwiftUIで以下のようなコードがあったとします。

struct ContentView: View {
  var body: some View {
      NavigationView {
        List {
          NavigationLink("Destination", destination: DestinationView())
        }
        .listStyle(GroupedListStyle())
        .navigationTitle("ContentView")
      }
    }
}

struct ContentView_Previews: PreviewProvider {
    static var previews: some View {
        ContentView()
    }
}
struct DestinationView: View {
  var body: some View {
      Text("Hello, world!")
      .navigationTitle("Destination")
      .toolbar {
        Button("Add", action: { })
      }
    }
}

struct DestinationView_Previews: PreviewProvider {
    static var previews: some View {
        DestinationView()
    }
}

ここでDestinationViewをプレビューするとき、ナビゲーションバーに配置するボタン(.toolbarはiOS14から)が表示されません。
DestinationViewの中にNavigationViewを追加もできない(するべきではない)です。

遷移先Viewでもプレビューでナビゲーションバーを表示するには

ナビゲーションバーも含めてプレビューする場合、以下のようにする必要があります。

struct DestinationView_Previews: PreviewProvider {
    static var previews: some View {
        NavigationView {
          DestinationView()
        }
    }
}

プレビュー時のみ、NavigationViewの中に入れます。そうすることで、プレビュー時にもナビゲーションバーも表示されます。

参考

https://www.hackingwithswift.com/quick-start/swiftui/how-to-preview-your-layout-in-a-navigation-view
https://developer.apple.com/documentation/swiftui/view/toolbar(content:)-5w0tj

Discussion