作为swiftUI的新手,我正在寻找一种能够在表格的某些单元格中应用颜色的方法。例如,类别“类型”,红色代表“系留”,绿色代表“非系留”,等等。我成功地将值放在"ForEach“中,但另一方面,我不能在那里集成文本。当我设法应用文本时,单元格的颜色并不适用。如果我能得到你的明智的意见,我是一个接受者。谢谢。
struct Jailbreak: Identifiable {
let id = UUID()
let noms: String
let types: String
let plateformes: String
}
struct AnnuaireView: View {
var JailbreakList = [
Jailbreak(noms: "Unc0ver", types: "Semi-Untethered", plateformes: "iOS/iPadOS"),
Jailbreak(noms: "Pangu9", types: "Untethered", plateformes: "iOS/tvOS")
]
let gridItems = [
GridItem(.flexible(), spacing: 3.0, alignment: .center),
GridItem(.flexible(), spacing: 3.0, alignment: .center),
GridItem(.flexible(), spacing: 3.0, alignment: .center),
]
var body: some View {
VStack {
HStack {
Text("Liste des Jailbreaks")
.font(.title)
.foregroundColor(Color.pink)
}
ScrollView(.vertical) {
LazyVGrid(columns: gridItems, alignment: .center, spacing: 10) {
ForEach(JailbreakList){ Jailbreak in
Text(Jailbreak.noms)
Text(Jailbreak.types)
.multilineTextAlignment(.center)
Text(Jailbreak.plateformes)发布于 2021-08-12 13:56:28
您可以添加一个返回颜色的函数,并使用修饰符.foregroundColor()应用该颜色。如果您不想更改文本颜色而是背景颜色,请使用.background()修饰符。
struct AnnuaireView: View {
var JailbreakList = [
Jailbreak(noms: "Unc0ver", types: "Semi-Untethered", plateformes: "iOS/iPadOS"),
Jailbreak(noms: "Pangu9", types: "Untethered", plateformes: "iOS/tvOS")
]
let gridItems = [
GridItem(.flexible(), spacing: 3.0, alignment: .center),
GridItem(.flexible(), spacing: 3.0, alignment: .center),
GridItem(.flexible(), spacing: 3.0, alignment: .center),
]
var body: some View {
VStack {
HStack {
Text("Liste des Jailbreaks")
.font(.title)
.foregroundColor(Color.pink)
}
ScrollView(.vertical) {
LazyVGrid(columns: gridItems, alignment: .center, spacing: 10) {
ForEach(JailbreakList){ Jailbreak in
Text(Jailbreak.noms)
Text(Jailbreak.types)
.multilineTextAlignment(.center)
.foregroundColor(getColor(for: Jailbreak))
Text(Jailbreak.plateformes)
}
}
}
}
}
private func getColor(for jailbreak: Jailbreak) -> Color {
switch jailbreak.types {
case "Untethered":
return Color.red
case "Semi-Untethered":
return Color.orange
case "Tethered":
return Color.green
default:
return Color.black
}
}
}发布于 2021-08-12 13:53:32
您应该使用List,并使用listRowBackground(_:)设置行背景。
代码(仅相关部分,其余部分在您的问题中):
VStack {
HStack {
Text("Liste des Jailbreaks")
.font(.title)
.foregroundColor(Color.pink)
}
List {
ForEach(JailbreakList) { jailbreak in
HStack {
Text(jailbreak.noms)
.frame(maxWidth: .infinity)
Text(jailbreak.types)
.multilineTextAlignment(.center)
.frame(maxWidth: .infinity)
Text(jailbreak.plateformes)
.frame(maxWidth: .infinity)
}
.listRowBackground(jailbreak.types == "Untethered" ? Color.green : Color.red)
}
}
}结果:

https://stackoverflow.com/questions/68758541
复制相似问题