カラム(サイドバー、コンテンツビュー、ディテールビュー)の表示状態を切り替える方法は?

この記事は約4分で読めます。

NavigationSplitViewVisibilityは、NavigationSplitViewのカラム(サイドバー、コンテンツビュー、ディテールビュー)の表示状態を制御するためにSwiftUIで使用される列挙型です。
この列挙型は、特定のカラムが表示されるかどうか、またどのように表示されるかを指定できます。

  • iOS:16.0以上
  • XCode(当サイトの環境):15.0.1

NavigationSplitViewは主に大きな画面での使用を目的としており、この列挙型を使用することで、アプリのUIをカスタマイズして、異なるデバイスや画面サイズで適切に表示させたりすることができます。

NavigationSplitViewVisibilityを使うことで何ができる?

NavigationSplitViewVisibilityを使用すると、サイドバーやコンテンビューを全て展開した状態にしたり、詳細ビューのみ表示したりといったことが制御できます。

パラメータ

  • detailOnly:詳細の列以外を非表示にする
  • all:すべての列を表示する
  • doubleColumn:3 列の分割ビューの先頭の列を非表示にする

サンプルコード

サンプルコードは、サイドバー、コンテンツビュー、ディテールビューの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 ?? "未選択"))
        }
    }
}

パラメータによる表示の違い

detailOnly
all
doubleColumn

これらの設定をNavigationSplitViewに適用することで、アプリのナビゲーションとレイアウトをより詳細に制御できます。例えば、小さな画面ではサイドバーを非表示にし、大きな画面では常に表示するように設定することが可能です。

まとめ

このようにNavigationSplitVIewの各カラムの表示状態を切り替えることで、画面サイズやデバイスに応じたレイアウトに切り替えることが出来ます。

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