【SwiftUI】ツールバーの実装方法

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

SwiftUIでツールバーを使用する方法は、アプリのナビゲーションやアクションをユーザーに提供する手段です。
SwiftUI 2.0以降、.toolbarモディファイアを使用して、ビューにツールバーを追加できます。ツールバーには、ボタン、テキスト、ピッカーなど、さまざまな種類のアイテムを配置できます。

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

toolbarについて

toolbarモディファイアを使用することで簡単に実装することができます。

なお、類似のモディファイアであるnavigationBarItemsは、iOS13.0以降非推奨となり、toolbarで代替するようappleデベロッパーより案内されています。https://developer.apple.com/documentation/swiftui/view/navigationbaritems(leading:trailing:)

基本的なツールバーの追加

toolbarの最もシンプルな使い方は以下のような使い方です。

NavigationView以下のコンテンツにtoolbarを適用し、ツールバーに配置したいコンテンツをtoolbar{}内に記述していきます。

下記のコード例では、見た目のみ整えたものですが、ボタンやナビゲーションリンクの動作を定義すれば通常のボタンのように動作させることができます。

import SwiftUI

struct ToolBarSample: View {
    var body: some View {
        NavigationView {
            Text("Hello World!")
                //Navigation以下のコンテンツにtoolbarを適用できる
                .toolbar {
                    // 以下のような基本的なViewはtoolbar内で使用することができる
                    HStack {
                        Text("テキスト")
                        Button("ボタン") { }
                        NavigationLink("ナビゲーションリンク") {}
                    }
                }
        }
    }
}

複数のツールバーアイテムの追加

  • iOS:14.0以上

複数のツールバーアイテムを追加するには、複数のToolbarItem.toolbarモディファイア内に配置します。
ツールバーにアイテムを配置する際は、HStackなども使用可能ですが、ToolbarItemを使用して配置するのが一般的なようです。

import SwiftUI

struct ToolBarSample: View {
    var body: some View {
        NavigationView {
            Text("Hello World!")
            //Navigation以下のコンテンツにtoolbarを適用できる
            .toolbar {
                //場所の指定をせずにアイテムを配置
                ToolbarItem() {//placement: .navigationBarLeading) {
                    Text("テキスト")
                }
                //アイテムをキャンセルアクションの位置に配置
                ToolbarItem(placement: .cancellationAction) {
                    Button("ボタン") { }
                }
                //アイテムを確認アクションの位置に配置
                ToolbarItem(placement: .confirmationAction) {
                    NavigationLink("ナビゲーション") {}
                }
                //複数のツールバーのアイテムをグループとする
                //画面した部分に配置する
                ToolbarItemGroup(placement: .bottomBar) {
                    Button(action: {}) {
                        Image(systemName: "doc.badge.plus")
                            .resizable()
                            .scaledToFit()
                            .frame(width: 50, height: 50)
                    }
                    Button(action: {}) {
                        Image(systemName: "calendar")
                            .resizable()
                            .scaledToFit()
                            .frame(width: 50, height: 50)
                    }
                }
            }
        }
    }
}

配置方法について

ToolbarItemplacementプロパティを使用して、ツールバーアイテムの配置を指定できます。
利用可能な配置には

  • .navigationBarLeading(ナビゲーションバーの左側)
  • .navigationBarTrailing(ナビゲーションバーの右側)
  • .bottomBar(画面の下部にあるツールバー)
  • .automatic(システムが自動的に決定)

などがあります。

ToolbarItemやToolbarItemGroupのパラメータにおけるplacementで配置を指定することができます。placementに指定する値は以下のページが参考になります。

ツールバーのカスタマイズ

プログラム例にも記載のとおり、ツールバーアイテムには、Buttonの他にもTextImagePickerなど、さまざまなビューを使用できます。これにより、アプリの機能やデザインに合わせたツールバーを作成できます。

ツールバーを実装する際のポイント

  • NavigationView内で使用する必要がある
  • iOS13以降はnavigationBarItemsが非推奨となっている
タイトルとURLをコピーしました