这就是我定义简单视图的方式:
VStack(alignment: .leading, spacing: 0) {
Text("my simple text in first line")
.frame(maxWidth: .infinity, alignment: .leading)
.multilineTextAlignment(.leading)
.foregroundColor(.white)
.font(.caption)
.padding(10)
.background(Color.gray)
.widgetAccentable()
Text("my simple text in second line")
.frame(maxWidth: .infinity, alignment: .leading)
.multilineTextAlignment(.leading)
.foregroundColor(.white)
.font(.caption)
.opacity(0.7)
.lineLimit(5)
.padding(10)
.background(Color.gray)
.widgetAccentable()
Spacer()
}
.frame(maxWidth: .infinity, alignment: .leading)
结果如下:
如何制作黑色背景和绿色(有色)文本?是否可以?和下面的图标一样。
widgetAccentable
的工作方式是将应用它的视图视为mask,并将重音应用于视图的所有非透明区域。通过在两个 .background(.gray)
上都有 Text
,您实际上会删除所有透明区域,因此整个小部件都会着色,并且您看不到文本。
所以只需删除
.background(.gray)
。如果你想让小部件有不同的背景,你可以使用 .containerBackground(..., for: .widget)
,或者把 .background(...)
after widgetAccentable
。
请注意,在有色小部件中,许多颜色都会被忽略。对于灰色,
.gray
显示为白色。您应该使用类似 .fill.tertiary
的内容来代替。