无法使用 SwiftUI Preview 在 Xcode 中预览 Widget

Ama*_*lho 5 macos xcode widgetkit swiftui

我正在尝试使用 Widget 上下文预览一些视图,例如:

\n
struct MyTasksView_Previews: PreviewProvider {\n    static var previews: some View {\n            MyTasksView(\n                myTasks: Fake.myTasks,\n                user: Fake.user,\n                error: ""\n            )\n            .previewContext(WidgetPreviewContext(family: .systemMedium))\n    }\n}\n
Run Code Online (Sandbox Code Playgroud)\n

但是,我在尝试运行预览时收到此错误。而且,我不确定为什么会发生这种情况。

\n
\n

RemoteHumanReadableError:未知的预览提供程序 \xe2\x80\x9cMyTasksView_Previews\xe2\x80\x9d\nMyApp 不包含名为 \xe2\x80\x9cMyTasksView_Previews\xe2\x80\x9d 的预览提供程序。检查您的构建设置以确保预览提供程序已编译到您的产品中。

\n
\n

我也尝试使用简单的Text(text).previewContext(WidgetPreviewContext(family: .systemMedium)),但它也不起作用。我正在使用 Xcode beta 5。

\n

在 WWDC 2020 的 Apple Emoji Rangers Demo App 中,我们可以看到这段代码进行预览:

\n
struct CharacterNameView_Previews: PreviewProvider {\n    static var previews: some View {\n        CharacterNameView(CharacterDetail.panda)\n            .previewContext(WidgetPreviewContext(family: .systemSmall))\n    }\n}\n
Run Code Online (Sandbox Code Playgroud)\n

表情符号流浪者示例

\n

Ruf*_*rza 13

我遇到了类似的问题,我通过将视图放入 VStack(或另一个容器)中解决了它。

这是我的有效代码:

struct WidgetViewPreviews: PreviewProvider {

  static var previews: some View {
    VStack {
      WidgetView(entry: .mock)
    }
    .previewContext(WidgetPreviewContext(family: .systemSmall))
  }
}

Run Code Online (Sandbox Code Playgroud)


小智 1

添加Widget extension目标并激活它。欲了解更多信息 https://developer.apple.com/documentation/widgetkit/creating-a-widget-extension