我知道我可以使用以下代码更改 SwiftUI 中的视图背景颜色:
.background(Color(.systemGroupedBackground))
但我无法为小部件背景颜色本身做到这一点!
我使用这个代码:
struct XWidget: Widget { // MARK: Widget is defined here
var body: some WidgetConfiguration {
StaticConfiguration(
kind: "xWidget",
provider: xProvider(),
placeholder: Text("Loading...")) { entry in
xWidgetEntryView(entry: entry).background(Color(.systemGroupedBackground)) // <= here
}.supportedFamilies([.systemSmall, .systemMedium, .systemLarge])
}
}
但是结果是这样的:
您需要指定全画幅,如下面的演示所示
StaticConfiguration(
kind: "xWidget",
provider: xProvider(),
placeholder: Text("Loading...")) { entry in
xWidgetEntryView(entry: entry)
.frame(maxWidth: .infinity, maxHeight: .infinity) // << here !!
.background(Color.green)
}.supportedFamilies([.systemSmall, .systemMedium, .systemLarge])
对于那些尝试更改支持dark和light模式的小部件背景的人。
Widget Extension中的
Assets.xcassets
"WidgetBackground"
"WidgetBackground"
"Any, Dark"
.background(Color("WidgetBackground"))
public var body: some WidgetConfiguration {
StaticConfiguration(kind: kind, provider: MyCustomTimeline()) { entry in
MyCustomWidgetView(entry: entry)
.background(Color("WidgetBackground"))
}
}
您还可以使用 ZStack 在小部件视图中设置颜色,如下所示:
var body: some View {
VStack {
ZStack {
Color.black
.ignoresSafeArea()
Link(destination: Deeplink.image.url!) {
Image("exampleImage")
.resizable()
.aspectRatio(contentMode: .fit)
.padding(.vertical, 3)
}
}
Text("Example text")
}
}
在 iOS 17+ 中,containerBackground(_:for:) 可用。
public var body: some WidgetConfiguration {
StaticConfiguration(kind: kind, provider: MyCustomTimeline()) { entry in
MyCustomWidgetView(entry: entry)
.containerBackground(.red.tertiary, for: .widget)
}
}