问题标签 [widgetkit]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
5715 浏览

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

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

0 投票
1 回答
318 浏览

swiftui - TimelineProvider 中的小部件大小和@Environment 值不匹配

大家早上好,

我正在使用 API 开发一个小部件,该 API 根据小部件的大小发送不同大小的数组(小:3 个新闻,中:6 个新闻,大:9 个新闻)。

我的印象是@Environment(\.widgetFamily) var familyTimelineProvider的时间线函数(我调用API的地方)之间存在问题。

实际上,在这个函数中,环境变量总是等于 systemMedium 大小,尽管小部件的“真实”大小。

你身边是否也有同样的问题?这是来自 Apple 的已知错误吗?我该如何解决这个错误?

谢谢你的帮助 :]

0 投票
1 回答
1488 浏览

ios - 在 SwiftUI 中对齐具有相同大小和纵横比填充的图像

我正在使用 SwiftUI 创建一个小部件,我正在努力解决在 Swift 中非常简单明了的东西。

我有 2 个彼此相邻的图像,我希望它们具有完全相同的大小和纵横比填充,但不会超出范围。

目前它的工作原理是我有一个图像和文本的视图。然后是一个父视图,它有一个 HStack 和其中 2 个视图。

基本上我想要实现的是这个视图,但图像正确:

在此处输入图像描述

这是这样做的:

对于父视图:

如果我像在 Swift 中那样添加纵横比来填充,它的外观是这样的:

在此处输入图像描述

更新

添加一个最小的可重现示例:

0 投票
1 回答
2999 浏览

swift - WidgetKit 小部件不允许每三秒刷新一次时间线

我创建了一个小部件,我想每三秒更新一次。

我有以下代码:

但是,这三秒将被忽略。模拟器总是显示下一次刷新将在五分钟后。我也尝试使用 .after 而不是 .atEnd,但这没有任何效果。五分钟是最小值还是与模拟器有关?

0 投票
0 回答
1524 浏览

ios - 多次调用自定义意图的小部件 getTimeline 方法

在具有单个自定义意图的 iOS 14 小部件中,当用户选择一个意图,然后更改为另一个时,我的getTimeline方法会在每次刷新时为每个意图调用多次 - 包括先前选择的意图。

我希望getTimeline仅以当前选择的意图调用。有没有办法检查意图是否是当前选择的意图?我在该方法中发出网络请求,getTimeline当小部件仅显示一个意图时,我不想发出多个请求。

例如,我下载了Emoji Ranger示例代码,并在 getTimeline 方法中添加了打印语句。我然后:

  1. 运行应用程序并打开一次。
  2. 将小部件添加到主屏幕。
  3. 在模拟器上运行小部件扩展目标。
  4. 选择角色蛋头。
  5. 选择角色蛋糕。

这是下一次小部件刷新时打印的内容(通常约 15 分钟):

非常感谢任何帮助,谢谢!

0 投票
2 回答
523 浏览

ios - 如果正在使用我的小部件,如何查询 WidgetKit?

我想检查用户是否将我的小部件添加到主屏幕,是否有用于此的 API?我找不到一个。WidgetCenter.getCurrentConfigurations返回应用程序提供的所有可用小部件,而不是使用过的小部件。

我寻找这样一个 API 的原因是:

  1. 我想报告小部件的使用情况。
  2. 我想决定是否应该通过WidgetCenter应用程序中发生状态更改时触发时间线重新加载。
0 投票
1 回答
59 浏览

swift - 为什么在测试新的 iOS 14 小部件时会弹出 siri?

正如标题所说,我正在模拟器上本地测试小部件。我有 xcode 12,种子 6。在 iPhone 8 模拟器上。

全新安装后,在小部件安装到主屏幕之前,Siri 会弹出,尽管我没有故意触发它。我也不知道有任何代码可以触发它。关于为什么会发生这种情况的任何建议?

0 投票
3 回答
2601 浏览

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

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

但是,在尝试运行预览时出现此错误。而且,我不确定为什么会这样。

RemoteHumanReadableError:未知预览提供程序“MyTasksView_Previews” MyApp 不包含名为“MyTasksView_Previews”的预览提供程序。检查您的构建设置以确保将预览提供程序编译到您的产品中。

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

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

表情符号流浪者示例

0 投票
0 回答
475 浏览

macos - 如何正确设置小部件以在 macOS 上进行后台更新?

我正在为 macOS 构建一个小部件,它仅适用于 macOS。并且,它在尝试重新创建另一个timeline(从getTimeline函数)后不断崩溃它抛出以下错误:

由于未捕获的异常“NSFileHandleOperationException”而终止应用程序,原因:“*** - [NSConcreteFileHandle fileDescriptor]:无效参数”以未捕获的 NSException 类型异常终止

我相信它是由于缺少方法的实现而产生的onBackgroundURLSessionEvents(matching:_:),这引起了我的注意以下文档⬇️

来自苹果文档:

当您的小部件扩展处于活动状态时,例如提供快照或时间线时,它可以启动后台网络请求。该过程类似于应用程序处理此类请求的方式,在后台下载文件中进行了描述。WidgetKit 不会恢复您的应用程序,而是直接激活您的小部件的扩展。要处理网络请求的结果,请在小部件的配置中使用 onBackgroundURLSessionEvents(matching:_:) 修饰符,并执行以下操作:

存储对完成参数的引用。在处理完所有网络事件后调用完成处理程序。

使用标识符参数查找您在发起后台请求时使用的 URLSession 对象。如果您的小部件扩展已终止,请使用标识符重新创建 URLSession。

调用 onBackgroundURLSessionEvents() 后,系统调用您提供给 URLSession 的 URLSessionDelegate 的 urlSession(_:downloadTask:didFinishDownloadingTo:) 方法。当所有事件都已交付后,系统会调用委托的 urlSessionDidFinishEvents(forBackgroundURLSession:) 方法。

要在网络请求完成后刷新小部件的时间线,请从代理的 urlSessionDidFinishEvents 实现中调用 WidgetCenter 方法。完成事件处理后,调用之前存储在 onBackgroundURLSessionEvents() 中的完成处理程序。

问题是urlSessionDidFinishEvents(forBackgroundURLSession:)仅适用于:

macOS 目标似乎没有等效的想法。那么,我们应该如何设置呢?

0 投票
3 回答
1133 浏览

ios - 我已将 Widgetkit 添加到我的应用程序中,但现在当应用程序在 Xcode 12 beta 上启动时在 iOS 13 上崩溃

我已将 WidgetKit 添加到我的应用程序中,但在 iOS 13 设备上,当应用程序启动时出现此错误时它会崩溃: dyld`__abort_with_payload

导致崩溃的代码部分是这样的:

我尝试过其他不成功的变体,例如:

该项目在objective-c中,我迅速导入了该类。

但是如果没有在任何地方添加 #import "myApp-Swift-h" 或使用该类,它就会不断崩溃。

有人可以告诉我我做错了什么或发生了什么吗?

提前致谢。

编辑:我在 Xcode 11 上尝试此代码并工作!

但它在 Xcode 12 beta 4 上崩溃了

编辑 2:它也在 Xcode 12 beta 6 上崩溃