extension View {
func widgetBackground(_ backgroundView: some View) -> some View {
// 如果是 iOS 17,则使用 containerBackground
if #available(iOSApplicationExtension 17.0, *) {
return containerBackground(for: .widget) {
backgroundView
}
} else {
return background(backgroundView)
}
}
}
struct MyWidgetEntryView : View {
var entry: Provider.Entry
var body: some View {
VStack {
Spacer()
HStack {
Spacer()
Text(entry.date, style: .time)
Spacer()
}
Spacer()
}
.widgetBackground(backgroundView: Color.red)
}
}
extension WidgetConfiguration {
func disableContentMarginsIfNeeded() -> some WidgetConfiguration {
if #available(iOSApplicationExtension 17.0, *) {
return self.contentMarginsDisabled()
} else {
return self
}
}
}
struct MyWidget: Widget {
let kind: String = "MyWidget" // 唯一标识
var body: some WidgetConfiguration {
StaticConfiguration(kind: kind, provider: Provider()) { entry in
MyWidgetEntryView(entry: entry)
}
.configurationDisplayName("这是小组件的名称")
.description("这是小组件的描述.")
.supportedFamilies([.systemSmall, .systemMedium, .systemLarge])
.disableContentMarginsIfNeeded()
}
}