SwiftUIのNavigationViewを使った画面遷移を含むアプリ開発の際、遷移先の子ビューのプレビュー画面にはnavigationBarTitlenavigationBarItemsなどで設定したUIが表示されない。

以下は現在作っているアプリのプレビュー用コードだが、これではLessonDetailViewで設定したnavigationBarTitleなどが表示されない。

struct LessonDetailView_Previews: PreviewProvider {
  static var previews: some View {
    let context = (UIApplication.shared.delegate as! AppDelegate)
      .persistentContainer.viewContext
    
    let lesson = Lesson(context: context)

    // ...
    // 一部省略
    // ...

    return LessonDetailView(lesson: lesson)
      .environment(\.managedObjectContext, context)
      .environment(\.locale, Locale(identifier: "ja_JP"))
  }
}

これを表示させたい場合は、上記コードのreturn文以下を次のように修正すれば良い。

return NavigationView {
  LessonDetailView(lesson: lesson)
    .environment(\.managedObjectContext, context)
    .environment(\.locale, Locale(identifier: "ja_JP"))
}

ビューをNavigationViewで囲むことで、親ビューから遷移した状態をプレビューで再現することができる。