SwiftUI iOS14 Widget - 使用相同的 WidgetFamily 创建创建多布局
SwiftUI iOS14 Widget - Create create multi layout with the same WidgetFamily
当我从主屏幕添加小部件时,我可以看到 Apple 创建的时钟应用程序有两个小 WidgetFamily
布局。
如何在时钟应用程序中制作两个小Widget?
我看到我只能为每个 WidgetFamily
创建一个布局。
看来您需要创建具有自己的视图、条目、提供程序的单独的 Widget...
这是一个可能的解决方案,使用 WidgetBundle
:
- 创建单独的小部件(确保
@main
注释 未 附加到它们中的任何一个):
struct Widget1: Widget {
let kind: String = "Widget1"
var body: some WidgetConfiguration {
StaticConfiguration(kind: kind, provider: Widget1Provider()) { entry in
Widget1Entry(entry: entry)
}
.configurationDisplayName("Widget1")
.description("This is an example widget v1.")
}
}
struct Widget2: Widget {
let kind: String = "Widget2"
var body: some WidgetConfiguration {
...
}
}
...
- 为每个 Widget 创建自己的 View(也可能是独立的 Entries 和 Provider,具体取决于您的需要):
struct Widget1EntryView: View {
var entry: Widget1Entry
var body: some View {
Text("Widget1")
}
}
struct Widget2EntryView: View {
var entry: Widget2Entry
var body: some View {
Text("Widget2")
}
}
...
- 使用
WidgetBundle
提供包含您的小部件的 包 :
@main
struct WidgetsBudle: WidgetBundle {
var body: some Widget {
Widget1()
Widget2()
// add more Widgets if you want
}
}
请注意 @main
附加到 WidgetsBudle
而不是小部件。
当我从主屏幕添加小部件时,我可以看到 Apple 创建的时钟应用程序有两个小 WidgetFamily
布局。
如何在时钟应用程序中制作两个小Widget?
我看到我只能为每个 WidgetFamily
创建一个布局。
看来您需要创建具有自己的视图、条目、提供程序的单独的 Widget...
这是一个可能的解决方案,使用 WidgetBundle
:
- 创建单独的小部件(确保
@main
注释 未 附加到它们中的任何一个):
struct Widget1: Widget {
let kind: String = "Widget1"
var body: some WidgetConfiguration {
StaticConfiguration(kind: kind, provider: Widget1Provider()) { entry in
Widget1Entry(entry: entry)
}
.configurationDisplayName("Widget1")
.description("This is an example widget v1.")
}
}
struct Widget2: Widget {
let kind: String = "Widget2"
var body: some WidgetConfiguration {
...
}
}
...
- 为每个 Widget 创建自己的 View(也可能是独立的 Entries 和 Provider,具体取决于您的需要):
struct Widget1EntryView: View {
var entry: Widget1Entry
var body: some View {
Text("Widget1")
}
}
struct Widget2EntryView: View {
var entry: Widget2Entry
var body: some View {
Text("Widget2")
}
}
...
- 使用
WidgetBundle
提供包含您的小部件的 包 :
@main
struct WidgetsBudle: WidgetBundle {
var body: some Widget {
Widget1()
Widget2()
// add more Widgets if you want
}
}
请注意 @main
附加到 WidgetsBudle
而不是小部件。