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

Fer*_*baş 14 ios swift widgetkit swiftui ios14

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

Leo*_*rey 32

该WidgetFamily(苹果文件)作为枚举的一部分,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.")
        }

    }
}
Run Code Online (Sandbox Code Playgroud)

  • 这总是返回 `.systemMedium`,有什么想法吗? (6认同)
  • 就我而言,我应该这样写 `@SwiftUI.Environment(\.widgetFamily) var family` (2认同)

Cos*_*min 9

除了接受的答案之外,在您的 Provider 类方法(getTimeline、getSnapshot 和 placeholder)中,您会获得一个具有家庭成员 var 的上下文对象。

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

苹果官方文档.

  • 谢谢!就我而言,只有“上下文”中的家庭才有效,而接受的答案方法则不起作用 (6认同)