SwiftUI — PreviewProvider

PreviewProvider 是 SwiftUI 中用于在 Xcode 预览界面(Canvas)中展示视图的协议,它允许开发者在不运行应用的情况下实时查看 UI 组件的外观和行为。

基本用法 #

要在 SwiftUI 中使用 PreviewProvider,需要创建一个符合该协议的静态属性 previews,返回一个 SwiftUI 视图:

import SwiftUI

struct MyView: View {
    var body: some View {
        Text("Hello, SwiftUI!")
            .font(.title)
            .padding()
    }
}

struct MyView_Previews: PreviewProvider {
    static var previews: some View {
        MyView()
    }
}

在 Xcode 的 Canvas 中,你可以实时预览 MyView,并进行 UI 调整。

多个预览 #

如果想要在不同环境下查看视图效果,可以返回一个 Group

struct MyView_Previews: PreviewProvider {
    static var previews: some View {
        Group {
            MyView()
            MyView().preferredColorScheme(.dark)
        }
    }
}

这样可以同时预览浅色和深色模式。

设备预览 #

你可以使用 .previewDevice() 指定特定设备:

struct MyView_Previews: PreviewProvider {
    static var previews: some View {
        MyView()
            .previewDevice("iPhone 14 Pro")
    }
}

交互预览 #

Xcode 预览支持与视图交互,例如滚动列表、按钮点击等。但某些动态数据(如 @State)可能不会保持状态,需要在运行 Live Preview(实时预览)模式下才能看到完整效果。

预览 UIKit 视图 #

在 SwiftUI 中,如果你想预览 UIKit 组件(例如 UIViewController),可以使用 UIViewControllerRepresentable

import SwiftUI
import UIKit

struct MyViewControllerPreview: UIViewControllerRepresentable {
    func makeUIViewController(context: Context) -> UIViewController {
        return UIViewController() // 这里替换成你的 UIViewController
    }
    
    func updateUIViewController(_ uiViewController: UIViewController, context: Context) {}
}

struct MyViewControllerPreview_Previews: PreviewProvider {
    static var previews: some View {
        MyViewControllerPreview()
    }
}

这样可以在 SwiftUI 的预览窗口中查看 UIKit 视图。

总结 #

  • PreviewProvider 让你可以在 Xcode Canvas 预览 SwiftUI 视图
  • 可以使用 Group 预览多个样式或环境
  • 可以指定 .previewDevice() 预览不同设备
  • UIViewControllerRepresentable 允许预览 UIKit 组件
本文共 550 字,创建于 Feb 14, 2025
相关标签: SwiftUI, Xcode