从 SwiftUI 中的应用程序 ContentView 访问小部件视图

Acess Widget View from app ContentView in SwiftUI

我想做的是在我的应用程序主屏幕上显示小部件视图,就像他们在此应用程序中所做的那样:

我试过从我的应用中调用 WidgetEntryView,但它不起作用。

  1. 为您的 ViewEntry 创建 单独的 文件:
struct SimpleEntry: TimelineEntry {
    let date: Date
}
struct SimpleWidgetEntryView: View {
    var entry: SimpleProvider.Entry

    var body: some View {
        Text(entry.date, style: .time)
    }
}
  1. 将这些文件的目标成员设置为 应用程序和小部件。

仅 select 这两个文件很重要 - 确保您不会不小心将 @main Widget / WidgetBundle 添加到 App 目标。

  1. 直接在 ContentView 中显示 Widget View:
struct ContentView: View {
     var body: some View {
        SimpleWidgetEntryView(entry: .init(date: Date()))
    }
}

这是一个 GitHub repository 包含预览小部件的不同小部件示例。

我写了一个 view controller 来在 UIKit 应用程序中显示小部件。我构建它是为了自动执行屏幕截图,但您可以将其用作参考。

你可以看看它的样子here

它支持所有小部件尺寸,虽然它没有确切的尺寸,但我认为它做得不错。

就像已经提到的那样,您还需要将一些小部件视图文件添加到您的应用程序目标中。