SwiftUI - 如何更改 ForEach 循环创建的视图的背景颜色?

问题描述 投票:0回答:1

本质上,我想替换由下面的

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)
swiftui swiftui-foreach
1个回答
2
投票

尝试这样的事情:

 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()

© www.soinside.com 2019 - 2024. All rights reserved.