👤

iOS 18 からの TabView と Tab

2025/02/11に公開

基本形

TabView() {
    Tab("aa", systemImage: "house") {
        Text("AA")
    }
    
    Tab("bb", image: "TestImage") {
        Text("BB")
    }
    
    Tab {
        Text("CC")
    } label: {
        Text("cc")
    }

    Tab {
        Text("DD")
    } label: {
        Label("dd", systemImage: "house")
    }
}

Aのやり方がAppleのサンプルコードでよく出てくるのでApple推奨と判断してよさそう。
自分の画像を使いたいときはBのように出来るが、選択/非選択の状態を色で表現するやりかたを調査中。
Cのやり方も受け付けるが、絵のスペースが空いたまま文字が下の方に表示されるだけ。

値取得形

選択されているタブを取得したい場合。

TabView(selection: $value) {
    Tab("heart", systemImage: "suit.heart", value: 0) {
        Text("Heart")
    }
    Tab("spade", systemImage: "suit.spade", value: 1) {
        Text("Spade")
    }
    Tab("diamond", systemImage: "suit.diamond", value: 2) {
        Text("Diamond")
    }
    Tab("club", systemImage: "suit.club", value: 3) {
        Text("Club")
    }
}

追加情報系

バッジとアクセシビリティ情報を追加できる。

TabView() {
    Tab {
        Text("DD")
    } label: {
        Label("dd", systemImage: "moon")
    }
    .badge(30)
    
    Tab {
        Text("EE")
    } label: {
        Image(systemName: "star.fill")
    }
    .accessibilityLabel("Favorites")
}

中身のみ系

横に移動させて切り替えるときなど。

TabView() {
    Tab {
        Text("Heart")
    }
    Tab {
        Text("Spade")
    }
    Tab {
        Text("Diamond")
    }
    Tab {
        Text("Club")
    }
}
.tabViewStyle(.page)

疑問

タブ内に画像なしで、テキストだけを真ん中に配置する方法。(文字の画像を作成する以外で)

その他

tabItem(_:) は18.2までとなりました。

TabRole は何かわかりません。

Discussion