我试图在视图中获取正确的小部件系列,但我总是获得.systemMedium值。这是我的观点:
import SwiftUI
struct MyView: View
{
@Environment(\.widgetFamily) var family
let entry: MyEntry
@ViewBuilder
var body: some View
{
switch family
{
case .systemSmall:
Text("systemSmall")
case .systemMedium:
Text("systemMedium")
case .systemLarge:
Text("systemLarge")
case .systemExtraLarge:
Text("systemExtraLarge")
}
}
}
Run Code Online (Sandbox Code Playgroud)
有什么想法为什么会发生这种情况吗?谢谢。
如何创建一个AppIntent将在您的应用程序进程中运行并在您的小部件中使用它的程序Button?我创建了一个新文件,将其添加到我的应用程序的目标中,创建了我的 AppIntent 结构,然后向我的小部件添加了一个按钮:Button(intent: TestIntent()) { Text("Test") }。这会导致编译时错误Cannot find \'TestIntent\' in scope,这是有道理的,因为我尝试使用它的小部件扩展中不存在此代码。但是向小部件添加交互性的文档指出:
\n\n对于小部件,创建一个采用 AppIntent 协议的新结构并将其添加到您的应用程序目标中...在协议\xe2\x80\x99s 所需的 Perform() 函数中,添加您想要提供给应用程序的操作的代码小部件。
\n
和
\n\n\n如果您采用 AppIntent 协议,您可以将自定义应用程序意图添加到小部件扩展目标或应用程序目标。将其添加到应用程序目标是更好的选择,因为您可以在应用程序中重复使用添加到小部件的按钮或切换按钮。
\n
和
\n\n\n当用户与小部件中的按钮或切换开关交互时,系统会在您的 app\xe2\x80\x99s 进程中运行 Perform() 函数。
\n
我对 SwiftUI 和 Firebase 还是很陌生。最近,作为一种爱好,我一直在为我的学校开发一个应用程序。Xcode 12 发布后,我决定尝试使用 Widgets 等新功能。但是,由于我的应用从 Firebase 获取数据,因此我遇到了一些问题。我最近的问题是“线程 1:”无法获取 FirebaseApp 实例。请在使用 Firestore 之前调用 FirebaseApp.configure()”。我不完全确定将“FirebaseApp.configure()”放在哪里,因为小部件没有 AppDelegate.swift。我的代码如下。
编辑:我已经重新排列了我的代码,以便我现在可以从原始 iOS 应用程序数据模型中获取数据。因此,我不会在小部件 Swift 文件中导入 Firebase。但是,我仍然遇到相同的错误(“SendProcessControlEvent:toPid:遇到错误:Error Domain=com.apple.dt.deviceprocesscontrolservice Code=8”和“-> 0x7fff5bb6933a <+10>: jae 0x7fff5bb69344 ; <+20> -线程 1:“无法获取 FirebaseApp 实例。请在使用 Firestore 之前调用 FirebaseApp.configure()””)。我还包含了@Wendy Liga 的代码,但我仍然遇到相同的错误。我的新代码如下:
iOS 应用数据模型
import Foundation
import SwiftUI
import Firebase
import FirebaseFirestore
struct Assessment: Identifiable {
var id:String = UUID().uuidString
var Subject:String
var Class:Array<String>
var Day:Int
var Month:String
var Title:String
var Description:String
var Link:String
var Crit:Array<String>
}
class AssessmentsViewModel:ObservableObject {
@Published …Run Code Online (Sandbox Code Playgroud) 我想向我的 iOS 应用程序添加一个 (WidgetKit-) 小部件。应用程序本身应将目标保持在 < 14。显然,小部件只能在那些 >= 14 的设备上可用,但应用程序也应在所有其他设备上运行。这可能吗?
我正在为 iOS 开发小部件,但我真的不知道如何为小部件下载图像。
小部件当前下载一组对象,每个对象都有一个图像的 URL。这个想法是每个对象都SimpleEntry为Timeline.
实现这一目标的最佳方法是什么?我读到 Widgets 不应该使用ObservableObject. 我在时间线提供程序中获取了一组对象,这似乎是 Apple 推荐的。但是我是否也在那里下载图像并等待所有完成后发送时间线?
任何建议都会非常有帮助,
我为我的应用程序准备了几个 iOS14 主屏幕小部件,并将它们全部返回,WidgetBundle如下所示:
@main
struct WidgetsBudle: WidgetBundle {
@WidgetBundleBuilder
var body: some Widget {
Widget1()
Widget2()
Widget3()
}
}
Run Code Online (Sandbox Code Playgroud)
Widget2依赖于位置服务才能正常工作,但是如果用户没有授予位置权限,那么即使显示这个小部件也没有任何意义。我可以有一些逻辑涉及返回WidgetBundlebody 内的小部件吗?
我想在小部件中显示从 Core Data 获取的数据。但@FetchRequest不适用于小部件。
据我了解,我们必须创建一个应用程序组并创建一个共享的持久容器。
我想知道的是如何从共享的持久容器中读取(获取)小部件上的数据,或者简单地说,如何在小部件中显示从 Core Data 获取的数据。
我正在使用一个UIKit应用程序并添加了一个带有SwiftUI和 的小部件Widgetkit。现在,当用户在主应用程序中执行某项操作时,我想更新小部件。
通常我应该使用 WidgetCenter.shared.reloadAllTimelines()对吗?但这仅适用于SwiftUI.
我可以说我的小部件应该每秒重新加载。但我的小部件执行 json 请求。这也会每秒执行我不想要的 json 请求。
为您提供信息。主应用UserDefaults程序与小部件共享。根据它的不同UserDefaults,它会读取它并改变它的外观。
现在,小部件在首次添加时会加载正确的 UserDefault。但正如我所说,更改添加的小部件不起作用。
我想删除和添加小部件不是一个用户友好的选项。
我使用新的闪亮的WidgetKit制作了一个小部件。它看起来不错并且按预期工作。然后,我将其所有逻辑放入单独的框架中,以在扩展和主应用程序之间共享常量值,并提供可单元测试的目标。引入框架后,SwiftUI 预览停止工作。我收到错误:Cannot preview in this file - Could not find host for previews。WidgetPreviewContext似乎不起作用。我想知道为什么。难道是因为我使用的是 macOS Catalina 10.15.6?
Xcode 15 Beta 8 中的 #Preview 宏的使用方式是否发生了变化?该代码曾经工作正常,但现在不再编译,因为== PREVIEW UPDATE ERROR: CompileDylibError: Failed to build WatchRecoveryWidget.swift Compiling failed: cannot convert value of type 'WatchRecoveryScoreTimeLineEntry' to closure result type 'any View'
#Preview(as: WidgetFamily.accessoryRectangular) {
WatchRecoveryScoreWidget()
} timeline: {
WatchRecoveryScoreTimeLineEntry(date: Date(), recoveryScore: 75, subscriptionIsActive: true)
}
Run Code Online (Sandbox Code Playgroud)