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

Posted

技术标签:

【中文标题】SwiftUI iOS14 Widget - 使用相同的 WidgetFamily 创建多布局【英文标题】:SwiftUI iOS14 Widget - Create create multi layout with the same WidgetFamily 【发布时间】:2020-10-08 02:00:32 【问题描述】:

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

如何在时钟应用中制作两个小Widget?

我发现我只能为每个 WidgetFamily 创建一个布局。

【问题讨论】:

@pawello2222 非常感谢。这就是我需要的:D 【参考方案1】:

看来你需要用自己的视图、入口、提供者创建单独的小部件...

这是使用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 
        ...
    


...
    为每个小部件创建自己的视图(可能还单独的条目和提供者,具体取决于您的需要):
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 而不是小部件。

【讨论】:

嗨@pawello2222,我可以在WidgetBundle 中使用循环吗? @CarsonVo 目前不可能 - 请参阅 ***.com/q/63797991/8697793

以上是关于SwiftUI iOS14 Widget - 使用相同的 WidgetFamily 创建多布局的主要内容,如果未能解决你的问题,请参考以下文章

如何在 iOS 14(SwiftUI) Widget Extension 中初始化 Facebook SDK?

iOS14 Widget小组件开发实践5——网络图片的加载

UIVisualEffectView 在 iOS 14 小部件中不起作用

SwiftUI:仅在 iOS 14+ 上使用“accessibilityIdentifier”

仅在 iOS 14、SwiftUI 时显示一些视图

SwiftUI 2.0:如何使用没有标题的工具栏()自定义 iOS 14 导航栏?