セクション(Section)の使い方
List 内で Section を使うと、項目をグループ分けして見やすく表示できます。設定画面や連絡先アプリのような、カテゴリ別の一覧表示に最適です。
Section の基本
Section はヘッダーとフッターを持つグループを作成します。
struct SettingsView: View {
var body: some View {
List {
Section("アカウント") {
Text("プロフィール")
Text("パスワード変更")
Text("メールアドレス")
}
Section("通知") {
Text("プッシュ通知")
Text("メール通知")
}
}
}
}引数に文字列を渡すだけで、自動的にヘッダーが表示されます。
ヘッダーとフッターのカスタマイズ
より複雑なヘッダーやフッターを作成したい場合は、header: と footer: パラメータを使います。
struct ContentView: View {
var body: some View {
List {
Section {
Text("項目1")
Text("項目2")
} header: {
Label("重要", systemImage: "star.fill")
.foregroundColor(.yellow)
} footer: {
Text("これらの項目は特に重要です")
.font(.caption)
}
}
}
}header と footer にはカスタムビューを渡せるため、アイコン付きのヘッダーや説明文付きのフッターを自由に作成できます。
動的なセクション
ForEach を使って、データからセクションを動的に生成することも可能です。
struct Contact: Identifiable {
let id = UUID()
var name: String
var initial: String
}
struct ContactListView: View {
let contacts = [
"A": [Contact(name: "Alice", initial: "A"),
Contact(name: "Alex", initial: "A")],
"B": [Contact(name: "Bob", initial: "B")],
"C": [Contact(name: "Charlie", initial: "C")]
]
var body: some View {
List {
ForEach(contacts.keys.sorted(), id: \.self) { key in
Section(key) {
ForEach(contacts[key]!) { contact in
Text(contact.name)
}
}
}
}
}
}Section のスタイル
ListStyle によって Section の見た目が変わります。
struct ContentView: View {
var body: some View {
List {
Section("セクション1") {
Text("項目A")
Text("項目B")
}
Section("セクション2") {
Text("項目C")
Text("項目D")
}
}
.listStyle(.insetGrouped) // iOS の設定アプリ風
}
}.automatic
プラットフォームに応じた標準スタイル
.insetGrouped
角丸のグループ化されたスタイル。iOS の設定アプリで使われている見た目。
.plain
区切り線のみのシンプルなスタイル。ヘッダーは上部に固定される。
.sidebar
macOS や iPadOS のサイドバー向けスタイル。
セクションの折りたたみ
iOS 17 以降では、セクションを折りたたみ可能にすることもできます。
struct ContentView: View {
var body: some View {
List {
Section("折りたたみ可能", isExpanded: .constant(true)) {
Text("項目1")
Text("項目2")
Text("項目3")
}
}
}
}isExpanded に Binding を渡すことで、プログラムから開閉状態を制御できます。
Section を活用することで、大量のデータも整理された形で表示でき、ユーザーにとって使いやすい UI を実現できます。











