【问题标题】:iOS 14 Widgets: How to create different layouts for every widget size family?iOS 14 小部件:如何为每个小部件尺寸系列创建不同的布局?
【发布时间】:2020-11-24 12:35:03
【问题描述】:

我想为每个小部件尺寸(即小、中、大)创建不同的布局。如何根据小部件的大小对代码进行分支?

【问题讨论】:

    标签: ios swift swiftui ios14 widgetkit


    【解决方案1】:

    WidgetFamily (Apple Documentation) 枚举作为WidgetKit 的一部分将允许您在视图中切换各种大小并进行相应调整。将此设置为 @Environment 变量并打开可用案例:

    • .systemSmall
    • .systemMedium
    • .systemLarge
    struct WidgetView : View {
       @Environment(\.widgetFamily) var family
    
        @ViewBuilder
        var body: some View {
            
            switch family {
            case .systemSmall:
                Text("Small")
            case .systemMedium:
                Text("Medium")
            case .systemLarge:
                Text("Large")
            default:
                Text("Some other WidgetFamily in the future.")
            }
    
        }
    }
    

    【讨论】:

    • 就我而言,我应该这样写@SwiftUI.Environment(\.widgetFamily) var family
    • 这总是返回.systemMedium,有什么想法吗?
    【解决方案2】:

    除了接受的答案之外,在您的 Provider 类方法(getTimeline、getSnapshot 和占位符)中,您会得到一个 context 对象,它有一个 family 成员变量。

    family 可以是以下三种小部件尺寸之一:.systemSmall、.systemMedium 和 .systemLarge

    Apple 的official documentation

    【讨论】:

    • 谢谢!在我的情况下,只有来自context 的家庭可以工作,并且接受的答案方法不
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-17
    • 1970-01-01
    • 2021-01-10
    • 1970-01-01
    相关资源
    最近更新 更多