我正在使用 Xcode 15 Beta 开发一个应用程序 + 小部件。该小部件在 iOS 17 Beta 模拟器上按预期工作,但在我的 iOS 17 Beta 设备上运行时,它显示“请采用 containerBackground API”而不是所需的内容。
我四处搜索,只能找到containerBackground
LocationButton ,但我根本没有使用 Core Location 。有人能指出为什么这里提到它吗?
我观察到一件奇怪的事情:在新的小部件中,即使图像已成功加载并放入缓存中,远程图像也经常无法显示。
对于图像下载,我尝试过:
所有这些都表明图像加载成功,但实际的小部件没有显示它。
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 失效?但是如何?
(因为它确实发生在我尝试的每个图像库中 - 我不认为它是库中的东西)
环境:
.timer 文本样式将其扩展以填充宽度,而不是占用空间来容纳所包含的字符串。有办法改变这种行为吗?
\nText(entry.timeFinished, style: .timer).multilineTextAlignment(.leading).opacity(0.5).background(Color.red)\n
Run Code Online (Sandbox Code Playgroud)\n\nText("3:41").opacity(0.5).background(Color.blue)\n
Run Code Online (Sandbox Code Playgroud)\n\n整个视图:
\nstruct 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 是否可以在 Xcode 12 中创建 Xcode 小部件但不使用 SwiftUI,而是使用 XIB 文件来构建小部件 UI?
我在 xcode 12 中创建了一个项目并添加了一个小部件扩展目标。目标已创建,我只剩下一个显示时间的简单小部件。小部件的预览按预期工作,小部件在模拟器中按预期显示。但是,如果我将视图更改为使用List
而不是Text
,如下所示:
struct SimpleWidgetEntryView : View {
var entry: Provider.Entry
var body: some View {
List {
Text("Something")
}
}
}
Run Code Online (Sandbox Code Playgroud)
预览和模拟器都在黄色背景上显示红色禁止进入标志:
我试过把List
里面 aVStack
和使用动态列表没有任何成功。我找不到任何关于List
在小部件中被禁止的文档。我试过重新启动 xcode 和模拟器,清理和重建。我正在使用 xcode 12.0 beta 3。
~我UIView
在尝试使用包装在UIViewRepresentable
. 该视图LineChartView
来自 Charts 库。~ 编辑:根据Apple 开发者论坛上的这篇文章,不可能在 WidgetKit 小部件中使用 UIKit 视图。
有谁知道我如何List
在小部件中使用 a ?非常感谢任何帮助。谢谢
我有一个用户可以登录的应用程序。如果用户已登录,则我会为我的小部件显示一个占位符,并且可以通过意图扩展对其进行配置。
配置有两个选项:
这适用于 1 个用户,但是,如果用户注销,然后使用不同的帐户登录,当他们尝试配置小部件时仍选择旧的选定选项,这是错误的选项,因为它现在是不同的用户。此外,旧数据仍显示在小部件中。
如何在 WidgetKit 中重置小部件的配置?意思是,当用户尝试对其进行配置时,所有先前的配置都将被取消选择并且为空。
我试过
WidgetCenter.shared.reloadAllTimelines()
Run Code Online (Sandbox Code Playgroud)
但这只会重新加载时间线方法,而不会重置配置。
我查看了 Apple 的文档,也找不到任何相关信息。
非常感谢,
我正在尝试使用 iOS 14 小部件并遇到一个奇怪的问题。当我List
在小部件视图中使用 a 时,我的小部件没有加载。如果我用HStack
,VStack
等一切工作正常。
为了举例,这里有一些简单的代码:
struct WidgetView: View {
var body: some View {
List {
Text("Test 1")
Text("Test 2")
}
}
}
Run Code Online (Sandbox Code Playgroud)
同样,这一切都适用于其他元素,这只发生在List
.
我尝试使用.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)
我正在使用新的 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()
应用程序中的任何其他地方时,小部件也会刷新,因此我确定我的小部件扩展已正确实现。但在上述情况下它不会更新。
这是一个错误还是我做错了什么?或者还有另一种方法可以在用户响应通知后重新加载小部件时间线。
我想为每个小部件大小(即小、中、大)创建不同的布局。如何根据小部件的大小分支我的代码?