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 组件