NavigationSplitViewVisibilityは、NavigationSplitViewのカラム(サイドバー、コンテンツビュー、ディテールビュー)の表示状態を制御するためにSwiftUIで使用される列挙型です。
この列挙型は、特定のカラムが表示されるかどうか、またどのように表示されるかを指定できます。
NavigationSplitViewは主に大きな画面での使用を目的としており、この列挙型を使用することで、アプリのUIをカスタマイズして、異なるデバイスや画面サイズで適切に表示させたりすることができます。
NavigationSplitViewVisibilityを使うことで何ができる?
NavigationSplitViewVisibilityを使用すると、サイドバーやコンテンビューを全て展開した状態にしたり、詳細ビューのみ表示したりといったことが制御できます。
パラメータ
サンプルコード
サンプルコードは、サイドバー、コンテンツビュー、ディテールビューの3カラムを表示するプログラムです。
サイドバーとコンテンツビューで果物と絵の組み合わせを選択するとディテールビューにその組み合わせが表示されます。
プログラムのポイント
以下プロパティにNavigationSplitViewVisibilityの列挙型の宣言を追加
8行目:@State private var columnVisibility = NavigationSplitViewVisibility.all
NavigationSplitViewにcolumnVisibilityパラメータを追加
11行目:NavigationSplitView(columnVisibility: $columnVisibility) {
import SwiftUI
struct NavigationSplitViewSmp: View {
let fruits: [String] = ["apple", "banana", "orenge"]
let fruitsImg: [String] = ["🍎", "🍌", "🍊"]
@State private var selected: String?
@State private var selectedImg: String?
@State private var columnVisibility =
NavigationSplitViewVisibility.all
var body: some View {
NavigationSplitView(columnVisibility: $columnVisibility) {
// 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 ?? "未選択"))
}
}
}パラメータによる表示の違い



これらの設定をNavigationSplitViewに適用することで、アプリのナビゲーションとレイアウトをより詳細に制御できます。例えば、小さな画面ではサイドバーを非表示にし、大きな画面では常に表示するように設定することが可能です。
まとめ
このようにNavigationSplitVIewの各カラムの表示状態を切り替えることで、画面サイズやデバイスに応じたレイアウトに切り替えることが出来ます。

