Когда виджет открыл приложение, может ли приложение узнать размер виджета

При нажатии на виджет iOS 14 открывается приложение:

var body: some View {
    Text(entry.text)
        .widgetURL(WidgetEntryView.deeplinkURL)
}

Может ли приложение получить размер (маленький, средний, большой) открывающего его виджета?


person Lim Thye Chean    schedule 15.10.2020    source источник


Ответы (1)


Вы можете использовать @Environment(\.widgetFamily) и передать его в widgetURL или Link:

struct Widget1EntryView: View {
    @Environment(\.widgetFamily) var widgetFamily

    var entry: Provider.Entry

    var deeplinkURL: URL {
        URL(string: "widget-deeplink://widgetFamily/\(widgetFamily)")!
    }

    var body: some View {
        VStack {
            Link("Tap me", destination: deeplinkURL)
            Text("Widget family: \(String(describing: widgetFamily))")
                .widgetURL(deeplinkURL)
        }
    }
}

Затем обнаружите открытие этого URL-адреса в своем основном приложении:

struct ContentView: View {
    var body: some View {
        Text("Test")
            .onOpenURL { url in
                print(url) // prints `widget-deeplink://widgetFamily/systemSmall`
                print(url.lastPathComponent) // prints `systemSmall`
            }
    }
}

Вот репозиторий GitHub с различными примерами виджетов, включая виджеты DeepLink и Environment. .

person pawello2222    schedule 15.10.2020