はじめに
※これは個人的なイメージです
あんまりわかっていないので、指摘、助言、批評など絶賛募集中です!
問題
以下のように実装した場合
struct ContentView: View {
var body: some View {
List(0..<3) {(row: Int) in
Text("Row \(row)")
.listRowBackground(Color.blue)
}
}
}
ご覧の通り、.listRowBackground(Color.blue)がListのcellに反映されていません
List + ForEachで対応した場合
struct ContentView: View {
var body: some View {
List {
ForEach(0..<3) {(row: Int) in
Text("Row \(row)")
.listRowBackground(Color.blue)
}
}
}
}
ちゃんと.listRowBackground(Color.blue)が効いている!
何故なのか?
別例
このように実装した場合
struct ContentView: View {
var body: some View {
List (0..<3) {(row: Int) in
Text("Row \(row)")
Spacer()
Text("hoge")
}
}
}
つまり、Listのみの場合TableViewの1行の中のViewとして扱われているイメージ!
一方、ForEachと組み合わせた場合
struct ContentView: View {
var body: some View {
List {
ForEach(0..<3) {(row: Int) in
Text("Row \(row)")
Spacer()
Text("hoge")
}
}
}
}
以下のように表示されます。
これは、下図のようにclosureから複数のViewを作成しているためだと思われます。