SwiftUI iOS14 Widget - 使用相同的 WidgetFamily 创建多布局

Car*_* Vo 2 widget swift widgetkit swiftui ios14

当我从主屏幕添加小部件时,我可以看到 Apple 创建的时钟应用程序有两个小WidgetFamily布局。

如何在时钟应用程序中制作两个小部件?

我看到我只能为每个WidgetFamily.

paw*_*222 7

似乎您需要创建具有自己的视图、条目、提供程序的单独小部件...

这是一个可能的解决方案WidgetBundle

  1. 创建单独的小部件(确保@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 {
        ...
    }
}

...
Run Code Online (Sandbox Code Playgroud)
  1. 为每个小部件创建自己的视图(也可能是单独的条目和提供者,具体取决于您的需要):
struct Widget1EntryView: View {
    var entry: Widget1Entry

    var body: some View {
        Text("Widget1")
    }
}

struct Widget2EntryView: View {
    var entry: Widget2Entry

    var body: some View {
        Text("Widget2")
    }
}

...
Run Code Online (Sandbox Code Playgroud)
  1. 使用WidgetBundle提供了包含您的小工具:
@main
struct WidgetsBudle: WidgetBundle {
    var body: some Widget {
        Widget1()
        Widget2()
        // add more Widgets if you want
    }
}
Run Code Online (Sandbox Code Playgroud)

请注意,它@main是附加WidgetsBudle到 Widgets 而不是附加到 Widgets。