iOS 14 Widgets:如何为每个widget尺寸系列创建不同的布局?

iOS 14 Widgets: How to create different layouts for every widget size family?

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

作为 WidgetKit 一部分的 WidgetFamily (Apple Documentation) 枚举将允许您切换视图中的各种尺寸并进行相应调整。将其设置为 @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.")
        }

    }
}

除了已接受的答案之外,在您的 Provider class 方法(getTimeline、getSnapshot 和占位符)中,您会得到一个 context 具有 family 成员 var.

的对象

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

苹果的 official documentation.