如何使用 SwiftUI 在 Xcode 15 Canvas 中以编程方式#Preview(新宏)不同设备?

Geo*_*ard 3 xcode ios swift swiftui xcode15

有一个新的#Preview宏(或者至少对我来说是新的)。SwiftLee 博客对此进行了讨论。我排除了下面示例的一些代码来问我的问题。

要在 SwiftUI 画布中预览代码,您过去必须编写代码:

struct ContentView: View {
    var body: some View {
        VStack {
            Text("Hello World!")
        }
    }
}

struct ContentView_Previews: PreviewProvider {
    static var previews: some View {
        ContentView()
    }
}
Run Code Online (Sandbox Code Playgroud)

...但是现在(2023 年 10 月)您可以编写代码:

struct ContentView: View {
    var body: some View {
        VStack {
            Text("Hello World!")
        }
    }
}

#Preview {
    ContentView()
}
Run Code Online (Sandbox Code Playgroud)

我的问题是:我们如何考虑 Apple 的#Preview宏语法重新编码以下内容,以便我们可以以编程方式更改在 SwiftUI-LivePreview-Canvas 上显示的设备:

struct ContentView_Previews: PreviewProvider {
    static var previews: some View {
        ContentView().previewDevice(PreviewDevice(rawValue: "iPhone SE"))
    }
}
Run Code Online (Sandbox Code Playgroud)

我看到的解决方法是画布上的下拉图形界面,可让您手动更改画布中显示的设备,但有没有办法以编程方式执行此操作。

在此输入图像描述

先感谢您!主总是拯救!

Swe*_*per 5

我在Xcode 15 发行说明中发现了这一点:

预览画布有一个新的控件,用于选择用于预览的设备。默认情况下,它跟踪所选运行目标的设备系列,但可以选择特定设备。这应该有利于修饰符previewDevice

这是一个相当强烈的消息,告诉您不要使用previewDevice,并使用画布 GUI 上的控件来选择未来的预览设备。

我认为这是合理的。人们不应仅在他们指定的一台设备上预览。应用程序应该在各种设备上运行,并且您编写的代码不应该与特定的设备关联。