当一个小部件打开一个应用程序时,应用程序是不是可以知道小部件的大小

Posted

技术标签:

【中文标题】当一个小部件打开一个应用程序时,应用程序是不是可以知道小部件的大小【英文标题】:When a widget opened an app, can the app knows the widget size当一个小部件打开一个应用程序时,应用程序是否可以知道小部件的大小 【发布时间】:2020-10-15 03:12:45 【问题描述】:

当点击 ios 14 小部件时,它会打开应用:

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

应用能否获取打开它的小部件的大小(小、中、大)?

【问题讨论】:

【参考方案1】:

您可以使用@Environment(\.widgetFamily) 并将其传递给widgetURLLink

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 repository,其中包含不同的小部件示例,包括 DeepLink 和环境小部件。

【讨论】:

以上是关于当一个小部件打开一个应用程序时,应用程序是不是可以知道小部件的大小的主要内容,如果未能解决你的问题,请参考以下文章

主屏幕小部件 BroadcastReceiver 可以监听电话事件吗?

OnUpdate() 未调用小部件服务

如何在 QT Designer 中指定默认文本光标小部件

如何在另一个小部件更新qt中的相同内容后更新小部件内容

如何使用来自小部件的不同附加功能打开相同的活动

不是***小部件时如何接收dropEvent?