大概整理了在 Xcode 11 中使用 SwiftUI 的常用预览设置。
预览
struct ContentView_Previews: PreviewProvider {    static var previews: some View {        ContentView()    }}这是新建 SwiftUI 项目时 ContentView 中的默认代码,开启预览的话,会显示 iPhone XR 模拟器,并在下方显示 Preview;那么,可以先试试自定义预览模拟器型号和名称。
设置预览型号
static var previews: some View {    ContentView()        // 想要预览的型号        .previewDevice("iPhone SE")        // 设置预览名称        .previewDisplayName("iPhone SE")}要查看支持的型号,按住 Option + 鼠标左键点击 .previewDevice 即可;或者点击 .previewDevice 后,在右侧 Help inspector 查看。
自定义大小
当前版本的预览并不支持横向模式,不过可以用另一种方法临时代替:
static var previews: some View {    ContentView()        // 568*320 是 iPhone SE 的屏幕点分辨率        .previewLayout(.fixed(width: 568, height: 320))}不过缺点是无法匹配外观,同时也无法在这个界面下使用实时预览功能。另外就是可以让预览根据视图显示大小:
static var previews: some View {    ContentView()        .previewLayout(.sizeThatFits)}深色模式
static var previews: some View {    ContentView()        .colorScheme(.dark) // 深色模式}当然,默认的便是 .ligth,也可以两者一起使用:
static var previews: some View {    Group {        ContentView().colorScheme(.dark)        ContentView().colorScheme(.light)    }}注:在 Xcode 11 Beta 3 中,深色模式无法正常显示;
多个设备同时预览
如果想查看代码在不同设备的运行情况,当然可以建立多个 PreviewProvider,或者按照官方教程所示:
static var previews: some View {    ForEach(["iPhone SE", "iPhone XS Max"].identified(by: \.self)) { deviceName in        LandmarkList()            .previewDevice(PreviewDevice(rawValue: deviceName))            .previewDisplayName(deviceName)    }}或者更简单:
static var previews: some View {    Group {        ContentView()            .previewDevice("iPhone SE")        ContentView()            .previewDevice("iPhone XR")    }}信息
版本
- Xcode 11.00 Beta 3 (11M362v)
- macOS 10.15 Beta 3 (19A501i)
参考
- SwiftUI Tutorials
- Apple Developer Documentation