はじめに
SwiftUIのListに対してpadding以外の方法でスペース追加ができるのか調べてみました
iOS17以降ではlistSectionSpacing
を使うことでListのセクションにスペースが追加できるようになっていました
環境
Xcode 15.2
内容
例えばこのようなシンプルなListの実装があるとして
struct ListSpacingView: View {
var body: some View {
List {
Section {
Text("HogeHoge")
Text("HogeHoge")
Text("HogeHoge")
}
Section("Section Title") {
Text("HogeHoge")
Text("HogeHoge")
Text("HogeHoge")
}
}
.listStyle(.insetGrouped)
}
}
このListのセクションやセルに対してのスペースをmodifierを使って実装します
listRowSpacing
iOS15以降で使えるlistRowSpacing
を使うことでセルのスペースは簡単に追加することができます
struct ListSpacingView: View {
var body: some View {
List {
Section {
Text("HogeHoge")
Text("HogeHoge")
Text("HogeHoge")
}
Section("Section Title") {
Text("HogeHoge")
Text("HogeHoge")
Text("HogeHoge")
}
}
.listStyle(.insetGrouped)
+ .listRowSpacing(10.0)
}
}
リストのstyleが違うと見え方も変わります。わかりやすくスペースを20
追加したものを表示しました
listSectionSpacing
iOS17以降ではlistSectionSpacing
でセクションのスペースを追加することができます
struct ListSpacingView: View {
var body: some View {
List {
Section {
Text("HogeHoge")
Text("HogeHoge")
Text("HogeHoge")
}
Section("Section Title") {
Text("HogeHoge")
Text("HogeHoge")
Text("HogeHoge")
}
}
.listStyle(.insetGrouped)
+ .listSectionSpacing(30)
}
}
スペース:0
→30
→100
ListSectionSpacing
スペースの値ではなく
static let compact: ListSectionSpacing
を渡すこともできます
static func custom(CGFloat) -> ListSectionSpacing
こちらで値を指定することもできるみたいです。直接スペースの値を入れるのと変わらない?🧐
おわりに
各セクションでスペースの値を変えたいなどあれば、paddingを使う方が良いとは思いつつ、Listに対してのmodifierで要件が満たせる場合は積極的に使いたいと思いました