Gala 是一个 Swift Package Manager 项目,适用于 macOS、iOS、tvOS 和 watchOS,它可以帮助你创建 SwiftUI 预览变体。
例如,如果你想以亮色和暗色模式渲染你的预览,你可以使用 NightAndDay。
static var previews: some View {
NightAndDay {
ContentView()
}
}
如果没有 Gala,这需要写成这样:
static var previews: some View {
Group {
ContentView()
.environment(\.colorScheme, .light)
ContentView()
.environment(\.colorScheme, .dark)
}
}
或者:
static var previews: some View {
ForEach(ColorScheme.allCases, id: \.self) { scheme in
ContentView()
}
}
但是,Gala 不止于此。它还提供了其他一些“属性迭代器”:
ContentSizeCategories(内容尺寸类别)HorizontalSizeClasses(水平尺寸类别)LayoutDirections(布局方向)LegibilityWeights(易读性权重)VerticalSizeClasses(垂直尺寸类别)只需将它们替换为 NightAndDay 即可。
static var previews: some View {
LayoutDirections {
ContentView()
}
}
此外,你可以按照如下方式迭代给定的布局集合:
static var previews: some View {
Layouts([.fixed(width: 200, height: 150), .sizeThatFits, .device]) {
ContentView()
}
}
如果你有一组想要用来设置视图的 frame,这将非常方便。
你也可以将一组设备传递给 Device 迭代器。
static var previews: some View {
Devices([.iPhoneX, .iPhone11]) {
ContentView()
}
}
感谢自动完成功能,你无需记住精确的名称。请注意,我们已经特别注意将 Apple 出色的产品名称转换为标识符。例如:
iPadPro9·7inchiPhoneXʀappleWatchSeries5﹘40mm感谢 Swift 对 Unicode 标识符的支持,你可以使用它们(并且感谢自动完成功能,你实际上可以输入它们 😅)。
你还可以使用 Devices.iPhones(iPads、watches、tvs)来预览所有这些设备。
static var previews: some View {
Devices(.iPhones) {
ContentView()
}
}
请注意,这些可能需要一段时间才能渲染,因此不建议用于经常使用的屏幕。但是,这非常适合用于单独的文件,你在其中设置营销照片并希望它们适用于所有设备。
所有迭代器都接受一个可选的 name 参数,该参数将添加一个 previewDisplayName,其中包含 name 和属性描述到预览中。
如果你发现任何问题或提出改进或扩展,请 fork 并提交 pull request。