Swift PreviewProvider在小部件扩展中不工作
我有这个看法Swift PreviewProvider在小部件扩展中不工作,swift,swiftui,widgetkit,Swift,Swiftui,Widgetkit,我有这个看法 import SwiftUI struct CurrentOrderView: View { let order: CurrentOrder var body: some View { VStack(alignment: .leading, spacing: 4) { HStack { Text("Order:") Text(order.orderId) } HStack
import SwiftUI
struct CurrentOrderView: View {
let order: CurrentOrder
var body: some View {
VStack(alignment: .leading, spacing: 4) {
HStack {
Text("Order:")
Text(order.orderId)
}
HStack {
Image(uiImage: deliveryImage)
.resizable()
.aspectRatio(contentMode: .fit)
.frame(width: 50.0, height: 50.0)
Text(order.formattedDeliveryTimeString)
}
}
.frame(minWidth: 0, maxWidth: .infinity, minHeight: 0, maxHeight: .infinity, alignment: .leading)
.padding()
.background(LinearGradient(gradient: Gradient(colors: [.orange, .yellow]), startPoint: .top, endPoint: .bottom))
}
}
// MARK: - Private
private extension CurrentOrderView {
private var deliveryImage: UIImage {
switch order.status {
case .driverOnTheWayToRestaurant:
return UIImage(named: "pin-restaurant") ?? UIImage()
case .driverOnTheWayToUser:
return UIImage(named: "rider") ?? UIImage()
}
}
}
#if DEBUG
struct ContentView_Previews: PreviewProvider {
static var previews: some View {
Group {
CurrentOrderView(
order: CurrentOrderEntryPlaceholderBuilder()
.entry(with: .snapshot).order
)
.previewLayout(.fixed(width: 200, height: 100))
}
}
}
#endif
在画布上,我看到:
将previewContext添加到PreviewProvider
将previewContext添加到PreviewProvider
使用WidgetPreviewContext代替previewLayout
以下内容将为中型小部件添加预览。systemMedium也可以是.systemSmall和.systemLarge
如果调试
结构内容视图\u预览:PreviewProvider{
静态var预览:一些视图{
团体{
CurrentOrderView
订单:CurrentOrderEntryPlaceholderBuilder
.entrywith:.snapshot.order
.previewContextWidgetPreviewContextfamily:.systemMedium
}
}
}
恩迪夫
使用WidgetPreviewContext代替previewLayout
以下内容将为中型小部件添加预览。systemMedium也可以是.systemSmall和.systemLarge
如果调试
结构内容视图\u预览:PreviewProvider{
静态var预览:一些视图{
团体{
CurrentOrderView
订单:CurrentOrderEntryPlaceholderBuilder
.entrywith:.snapshot.order
.previewContextWidgetPreviewContextfamily:.systemMedium
}
}
}
恩迪夫
看起来您不想预览小部件,只想预览视图 您可以做的是将CurrentOrderView及其条目移动到另一个文件中 然后将此文件添加到除小部件目标之外的主应用程序目标 还要确保重命名previews struct,使其名称不同于自动生成的ContentView\u预览 这样,您的预览将按预期工作:
struct CurrentOrderView_Previews: PreviewProvider {
static var previews: some View {
Group {
CurrentOrderView(
order: CurrentOrderEntryPlaceholderBuilder()
.entry(with: .snapshot).order
)
.previewLayout(.fixed(width: 200, height: 100))
}
}
}
看起来您不想预览小部件,只想预览视图 您可以做的是将CurrentOrderView及其条目移动到另一个文件中 然后将此文件添加到除小部件目标之外的主应用程序目标 还要确保重命名previews struct,使其名称不同于自动生成的ContentView\u预览 这样,您的预览将按预期工作:
struct CurrentOrderView_Previews: PreviewProvider {
static var previews: some View {
Group {
CurrentOrderView(
order: CurrentOrderEntryPlaceholderBuilder()
.entry(with: .snapshot).order
)
.previewLayout(.fixed(width: 200, height: 100))
}
}
}
但我不希望这个视图是完整的小部件大小,实际上它只占小部件的50%,我该怎么办?我不明白@PaulT的意思。我的意思是,在我的情况下,CurrentOrderView应该占小部件宽度的50%,因为小部件由CurrentOrderView+另一个视图组成。但使用您的代码,它以100%显示CurrentOrderViewwidth@PaulT. 我在你的问题中只看到一个视图我理解,但这就是为什么我在问题中手动设置大小,但我不希望这个视图是完整的小部件大小,实际上它只占小部件的50%,我该怎么办?我不明白你说的@PaulT是什么意思。我的意思是,在我的情况下,CurrentOrderView应该占据小部件宽度的50%,因为小部件由CurrentOrderView+另一个视图组成。但使用您的代码,它以100%显示CurrentOrderViewwidth@PaulT. 我在你的问题中只看到一个视图我明白,但这就是为什么我在问题中手动设置大小,但我不希望这个视图是完整的小部件大小,实际上它只占小部件的50%,我应该怎么做?但我不希望这个视图是完整的小部件大小,实际上它只占小部件的50%,我应该怎么做?这是有希望的,但是它不起作用。你可以尝试更改ContentView\u预览的名称吗?这很有希望,但它不起作用。你可以尝试更改ContentView\u预览的名称吗?