标签: widgetkit

iOS 17 Beta 设备上的 Widget - 采用 containerBackground API

我正在使用 Xcode 15 Beta 开发一个应用程序 + 小部件。该小部件在 iOS 17 Beta 模拟器上按预期工作,但在我的 iOS 17 Beta 设备上运行时,它显示“请采用 containerBackground API”而不是所需的内容。

在此输入图像描述

我四处搜索,只能找到containerBackgroundLocationButton 但我根本没有使用 Core Location 。有人能指出为什么这里提到它吗?

widgetkit swiftui xcode15 ios17

26
推荐指数
2
解决办法
1万
查看次数

iOS WidgetKit:远程图像无法加载

我观察到一件奇怪的事情:在新的小部件中,即使图像已成功加载并放入缓存中,远程图像也经常无法显示

对于图像下载,我尝试过:

  • SDWebImageSwiftUI
  • 翠鸟
  • 网址

所有这些都表明图像加载成功,但实际的小部件没有显示它。

struct TestWidgetEntryView : View {
    var entry: Provider.Entry

    var body: some View {
        WebImage(url: URL(string: "https://miro.medium.com/max/3840/0*TLqp5Uwavd-U_xrs.jpg"))
                        .onSuccess()
                        .resizable()
    }
}
Run Code Online (Sandbox Code Playgroud)

在调试器的第二次运行 - 从缓存加载图像 - 我显示图像,但在初始运行时从未(?)。

感觉就像在 onSuccess 我需要触发 UI 失效?但是如何?

(因为它确实发生在我尝试的每个图像库中 - 我不认为它是库中的东西)

环境:

  • iOS 14 Beta 3(设备和模拟器)
  • Xcode 12 测试版 3
  • 在调试运行期间,内存使用量约为 15mb

widgetkit swiftui ios14

22
推荐指数
2
解决办法
4887
查看次数

WidgetKit:.timer 文本样式将其扩展以填充宽度,而不是占用空间来适应所包含的字符串

.timer 文本样式将其扩展以填充宽度,而不是占用空间来容纳所包含的字符串。有办法改变这种行为吗?

\n
Text(entry.timeFinished, style: .timer).multilineTextAlignment(.leading).opacity(0.5).background(Color.red)\n
Run Code Online (Sandbox Code Playgroud)\n

在此输入图像描述

\n
Text("3:41").opacity(0.5).background(Color.blue)\n
Run Code Online (Sandbox Code Playgroud)\n

在此输入图像描述

\n

整个视图:

\n
struct TimePieceWidgetEntryView: View {\n    \n    var entry: Provider.Entry\n    \n    var body: some View {\n        VStack {\n            Text("Timer \xe2\x8f\xb1")\n            Text(Date().addingTimeInterval(600), style: .timer).opacity(0.5)\n        }.font(.title.bold().monospacedDigit())\n        .padding(5)\n        .widgetURL(entry.url)\n    }\n    \n}\n
Run Code Online (Sandbox Code Playgroud)\n

ios swift widgetkit swiftui

22
推荐指数
1
解决办法
1353
查看次数

没有 SwiftUI 的 Xcode 12 iOS 14 小部件

是否可以在 Xcode 12 中创建 Xcode 小部件但使用 SwiftUI,而是使用 XIB 文件来构建小部件 UI?

widget widgetkit swiftui ios14 xcode12

20
推荐指数
2
解决办法
4730
查看次数

为什么有些视图在小部件中显示为红色的禁止进入标志?

我在 xcode 12 中创建了一个项目并添加了一个小部件扩展目标。目标已创建,我只剩下一个显示时间的简单小部件。小部件的预览按预期工作,小部件在模拟器中按预期显示。但是,如果我将视图更改为使用List而不是Text,如下所示:

struct SimpleWidgetEntryView : View {
    var entry: Provider.Entry

    var body: some View {
        List {
            Text("Something")
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

预览和模拟器都在黄色背景上显示红色禁止进入标志:

xcode 12 预览中显示的禁止进入标志

我试过把List里面 aVStack和使用动态列表没有任何成功。我找不到任何关于List在小部件中被禁止的文档。我试过重新启动 xcode 和模拟器,清理和重建。我正在使用 xcode 12.0 beta 3。

~我UIView在尝试使用包装在UIViewRepresentable. 该视图LineChartView来自 Charts 库。~ 编辑:根据Apple 开发者论坛上的这篇文章,不可能在 WidgetKit 小部件中使用 UIKit 视图。

有谁知道我如何List在小部件中使用 a ?非常感谢任何帮助。谢谢

ios swift widgetkit swiftui swiftui-list

18
推荐指数
2
解决办法
1412
查看次数

如何在 WidgetKit 中重置意图扩展配置

我有一个用户可以登录的应用程序。如果用户已登录,则我会为我的小部件显示一个占位符,并且可以通过意图扩展对其进行配置。

配置有两个选项:

  • 第一个选项取决于当前登录用户的用户名。
  • 第二个选项取决于第一个选项的值。

这适用于 1 个用户,但是,如果用户注销,然后使用不同的帐户登录,当他们尝试配置小部件时仍选择旧的选定选项,这是错误的选项,因为它现在是不同的用户。此外,旧数据仍显示在小部件中。

如何在 WidgetKit 中重置小部件的配置?意思是,当用户尝试对其进行配置时,所有先前的配置都将被取消选择并且为空。

我试过

WidgetCenter.shared.reloadAllTimelines()
Run Code Online (Sandbox Code Playgroud)

但这只会重新加载时间线方法,而不会重置配置。

我查看了 Apple 的文档,也找不到任何相关信息。

非常感谢,

swift widgetkit ios14

17
推荐指数
1
解决办法
890
查看次数

iOS 14 小部件:使用列表时小部件不呈现

我正在尝试使用 iOS 14 小部件并遇到一个奇怪的问题。当我List在小部件视图中使用 a 时,我的小部件没有加载。如果我用HStackVStack等一切工作正常。

为了举例,这里有一些简单的代码:

struct WidgetView: View {

   var body: some View {
    
       List {
           Text("Test 1")
           Text("Test 2")
       }
   }
}
Run Code Online (Sandbox Code Playgroud)

结果我看到了这张图片: 在此处输入图片说明

同样,这一切都适用于其他元素,这只发生在List.

swift widgetkit swiftui swiftui-list ios14

15
推荐指数
2
解决办法
2042
查看次数

如何删除内容视图周围的填充并让内容视图填充 Widget iOS 17+ 和 MacOS Sonoma 中的整个区域?

我尝试使用.ignoresSafeArea() ,但没有成功。

iOS 16 和早期版本中的内容视图周围没有填充。

struct CommonDailyEyeTipsWidget: Widget {
    let kind: String = "CommonDailyEyeTipsWidget"

    init() {
        //setup firebase
        FirebaseApp.configure()
    }
    
    var body: some WidgetConfiguration {
        StaticConfiguration(kind: kind, provider: Provider()) { entry in
            Rectangle()
                .foregroundStyle(Color.primary)
                .ignoresSafeArea() // Does not work
                .containerBackground(.accent, for: .widget)
            
        }
        .contentMarginsDisabled()
        .configurationDisplayName("My Widget")
        .description("This is an example widget.")
    }
}

Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

ios widgetkit watchos swiftui macos-sonoma

15
推荐指数
2
解决办法
3176
查看次数

如何从通知响应中重新加载 iOS 14 小部件的时间线?

我正在使用新的 WidgetKit 为 iOS 14 制作一个主屏幕小部件,我希望我的小部件时间线在用户响应通知时刷新。

这是我的代码目前的样子:

func userNotificationCenter(_ center: UNUserNotificationCenter, didReceive response: UNNotificationResponse, withCompletionHandler completionHandler: @escaping () -> Void) {
        
    if response.actionIdentifier == "actionIdentifier" {        
        print("notification response received")
        WidgetCenter.shared.reloadAllTimelines()
    }

    completionHandler()
}
Run Code Online (Sandbox Code Playgroud)

但是当用户响应通知时,我的小部件不会更新。打印语句被打印,所以我知道我的应用程序正在接收响应。当我调用reloadAllTimeLines()应用程序中的任何其他地方时,小部件也会刷新,因此我确定我的小部件扩展已正确实现。但在上述情况下它不会更新。

这是一个错误还是我做错了什么?或者还有另一种方法可以在用户响应通知后重新加载小部件时间线。

ios swift widgetkit swiftui ios14

14
推荐指数
1
解决办法
9136
查看次数

iOS 14 小部件:如何为每个小部件尺寸系列创建不同的布局?

我想为每个小部件大小(即小、中、大)创建不同的布局。如何根据小部件的大小分支我的代码?

ios swift widgetkit swiftui ios14

14
推荐指数
2
解决办法
4558
查看次数