toolbar の使い方

ナビゲーションバーにボタンやアイコンを追加するには toolbar モディファイアを使用します。編集ボタンや追加ボタンなど、画面に関連するアクションを配置できます。

toolbar の基本

toolbar モディファイアの中に ToolbarItem を配置してボタンを追加します。

struct ContentView: View {
    var body: some View {
        NavigationStack {
            Text("コンテンツ")
                .navigationTitle("ホーム")
                .toolbar {
                    Button("追加") {
                        // 追加処理
                    }
                }
        }
    }
}

単一のボタンであれば、ToolbarItem を省略してそのまま Button を配置できます。

ToolbarItem で配置を指定

ToolbarItem を使うと、ボタンの配置位置を明示的に指定できます。

.toolbar {
    ToolbarItem(placement: .topBarTrailing) {
        Button {
            // 処理
        } label: {
            Image(systemName: "plus")
        }
    }
    
    ToolbarItem(placement: .topBarLeading) {
        Button("編集") {
            // 処理
        }
    }
}
.topBarLeading

ナビゲーションバーの左側

.topBarTrailing

ナビゲーションバーの右側

.bottomBar

画面下部のツールバー

.principal

ナビゲーションバーの中央(タイトル位置)

複数のボタンを配置

struct ContentView: View {
    @State private var isEditing = false
    
    var body: some View {
        NavigationStack {
            List {
                Text("項目1")
                Text("項目2")
            }
            .navigationTitle("リスト")
            .toolbar {
                ToolbarItem(placement: .topBarTrailing) {
                    Button {
                        isEditing.toggle()
                    } label: {
                        Text(isEditing ? "完了" : "編集")
                    }
                }
                
                ToolbarItem(placement: .topBarTrailing) {
                    Button {
                        // 追加処理
                    } label: {
                        Image(systemName: "plus")
                    }
                }
            }
        }
    }
}

Menu をツールバーに配置

.toolbar {
    ToolbarItem(placement: .topBarTrailing) {
        Menu {
            Button("オプション1") { }
            Button("オプション2") { }
            Divider()
            Button("削除", role: .destructive) { }
        } label: {
            Image(systemName: "ellipsis.circle")
        }
    }
}

ボトムバー

placement: .bottomBar で画面下部にツールバーを配置できます。

struct ContentView: View {
    var body: some View {
        NavigationStack {
            Text("コンテンツ")
                .navigationTitle("ホーム")
                .toolbar {
                    ToolbarItem(placement: .bottomBar) {
                        Button {
                            // 共有
                        } label: {
                            Image(systemName: "square.and.arrow.up")
                        }
                    }
                    
                    ToolbarItem(placement: .bottomBar) {
                        Spacer()
                    }
                    
                    ToolbarItem(placement: .bottomBar) {
                        Button {
                            // 削除
                        } label: {
                            Image(systemName: "trash")
                        }
                    }
                }
        }
    }
}

ツールバーの表示/非表示

.toolbar(.hidden, for: .navigationBar)  // ナビゲーションバーを非表示
.toolbar(.hidden, for: .bottomBar)      // ボトムバーを非表示
.topBarTrailing

右上に配置。追加ボタンや設定ボタンに使用されることが多い。

.bottomBar

画面下部に配置。写真アプリのような操作パネルに適している。

toolbar はナビゲーションバーをカスタマイズする標準的な方法です。次の記事では ToolbarItem の配置オプションについてより詳しく解説します。