NavigationSplitViewは、SwiftUI 3.0で導入されたコンポーネントで、iPadOSやmacOSなどの大きな画面で使われる2カラム(サイドバーとディテールビュー)または3カラム(サイドバー、コンテンツビュー、ディテールビュー)のレイアウトを構築するために設計されています。

これにより、アプリのナビゲーションが改善され、特にタブレットやデスクトップのような大きなディスプレイを持つデバイスでの使いやすさの向上が期待できます。
基本的な使い方(2カラム)
NavigationSplitViewを使うと、ユーザーがアイテムを選択したときに詳細情報を表示するサイドバーとディテールビューを持つUIを簡単に作成できます。基本的な使用例は以下の通りです。
import SwiftUI
struct NavigationSplitViewSmp: View {
let fruits: [String] = ["apple", "banana", "orenge"]
@State private var selected: String?
var body: some View {
NavigationSplitView {
// iPadにおいてサイドバーに表示されるビュー
// iPhoneの場合は1番目のコンテンツ
List(fruits, id: \.self, selection: $selected) { fruit in
Text(fruit)
}
} detail: {
// ディテールビューに表示されるビュー
Text("選択したフルーツ:" + (selected ?? "未選択"))
}
}
}iPadでのプレビュー
iPhoneでのプレビュー


このコードは、サイドバーにapple,banana,orengeのアイテムをリスト表示し、アイテムが選択されたときにディテールビューにそのアイテムの詳細を表示する基本的なNavigationSplitViewの例です。
基本的な使い方(3カラム)
NavigationSplitViewは、さらに複雑なナビゲーションパターンにも対応しています。
例えば、3カラムレイアウトを使う場合、サイドバー、コンテンツビュー、ディテールビューの3つのセクションを定義できます。
import SwiftUI
struct NavigationSplitViewSmp: View {
let fruits: [String] = ["apple", "banana", "orenge"]
let fruitsImg: [String] = ["🍎", "🍌", "🍊"]
@State private var selected: String?
@State private var selectedImg: String?
var body: some View {
NavigationSplitView {
// iPadにおいてサイドバーに表示されるビュー
// iPhoneの場合は1番目のコンテンツ
List(fruits, id: \.self, selection: $selected) { fruit in
Text(fruit)
}
} content: {
// コンテンツビュー
List(fruitsImg, id: \.self, selection: $selectedImg) { fruitImg in
Text(fruitImg)
}
} detail: {
// ディテールビューに表示されるビュー
Text("選択したフルーツ:" + (selected ?? "未選択") + (selectedImg ?? "未選択"))
}
}
}iPadでのプレビュー
iPhoneでのプレビュー
このコードは先述の2カラムのサンプルコードに”コンテンツビュー”として、フルーツの絵を選択するビューを追加したものです。
サイドバーでフルーツの文字列、コンテンツビューでフルーツの絵を選択すると、ディテールビューにてその組み合わせが表示されるようになっています。
NavigationSplitViewのカスタマイズ
以下の記事ではNavigationSplitViewのカスタマイズ方法について説明しています。よろしければ合わせて参考にしてください。
カラム(サイドバー、コンテンツビュー、ディテールビュー)の表示/非表示を制御する



NavigationSplitViewにおいて初期表示するビューを変更するには?



NavigationSplitViewにおいて各カラムの幅を指定するには?

NavigationSplitViewの”スタイル”を変更
ツールバーボタンのカスタマイズ

注意点
NavigationSplitViewは、特に大きな画面での使用を念頭に置いて設計されています。iPhoneなどの小さな画面では、NavigationStackを使用した方が適切な場合があります。- レスポンシブなデザインを実現するためには、異なるデバイスサイズ(iPadやiPhone)や向き(縦向きや横向き)に応じてUIが適切に調整されるように設計することが重要です。
まとめ
本記事では以下のNavigationSplitViewに関する以下の使い方について紹介しました。
- 基本的な使い方
- カラム(サイドバー、コンテンツビュー、ディテールビュー)の表示状態を制御する
- NavigationSplitViewにおいて初期表示するビューを制御する
- カラムの幅を設定する
- NavigationSplitViewのスタイルを指定
- ツールバーボタンの削除と追加
NavigationSplitViewを使用することで、SwiftUIアプリのナビゲーションとレイアウトを柔軟に、かつ直感的に構築できます。特に、複数のビューを同時に表示する必要があるアプリケーションで効果的です。






