本质上,我想替换由下面的
ForEach
创建的行的背景颜色,我将按照例如的顺序将其放入ScrollView
中。白色、灰色、白色、灰色等
这怎么办?
@State var posts: [Item] = []
@State var expanded = false
@State var totalRows = 0
ForEach(posts.prefix(expanded ? totalRows : 5), id: \.id) { post in
Label {
VStack(alignment: .leading) {
Text(convertDate(post.date))
}
.padding(.leading, 8)
} icon: {}
}
.frame(width: UIScreen.main.bounds.width - 35, height: 85, alignment: .leading)
.background(Color("cellColor")) //<-- Currently Setting Color Here
.cornerRadius(10)
尝试这样的事情:
List { // <-- here
ForEach(Array(posts.prefix(expanded ? totalRows : 5).enumerated()), id: \.0) { index, post in // <-- here
VStack {
Label {
VStack(alignment: .leading) {
Text(convertDate(post.date))
}
.padding(.leading, 8)
} icon: {}
}
.listRowBackground(index % 2 == 0 ? Color.gray : Color.white) // <-- here
}
}
.frame(width: 333, height: 444, alignment: .leading) // <-- for testing
.cornerRadius(10)
如果您想使用
ScrollView
代替 List
,请使用 .background(index % 2 == 0 ? Color.gray : Color.white)
代替
的.listRowBackground(...)
注意,通过细微调整,您还可以使用
.indices
代替 .enumerated()
。