Cod*_*rew 26 widgetkit swiftui xcode15 ios17
我正在使用 Xcode 15 Beta 开发一个应用程序 + 小部件。该小部件在 iOS 17 Beta 模拟器上按预期工作,但在我的 iOS 17 Beta 设备上运行时,它显示“请采用 containerBackground API”而不是所需的内容。
我四处搜索,只能找到containerBackgroundLocationButton ,但我根本没有使用 Core Location 。有人能指出为什么这里提到它吗?
Wil*_* T. 59
很棒的 Filip N\xc4\x9bme\xc4\x8dek文章,介绍了对此问题的修补程序,使其仍然可以在 iOS16 设备上运行。
\n总而言之:
\n添加带有操作系统检查的扩展:
\nextension View {\n func widgetBackground(_ backgroundView: some View) -> some View {\n if #available(iOSApplicationExtension 17.0, *) {\n return containerBackground(for: .widget) {\n backgroundView\n }\n } else {\n return background(backgroundView)\n }\n }\n}\nRun Code Online (Sandbox Code Playgroud)\n添加widgetBackground到所有不同的小部件(当然,选择您的背景视图/颜色):
var body: some View {\n VStack {\n // widget content\n }\n .widgetBackground(Color.black)\n}\nRun Code Online (Sandbox Code Playgroud)\n此外,他还提到了一个关于 iOS17 小部件的有趣说明,它们会在您的设计中强制添加额外的边距填充。
\n您可以在生成 WidgetConfiguration 时禁用此功能:
\nvar body: some WidgetConfiguration {\n //IntentConfiguration stuff\n .contentMarginsDisabled()\n}\nRun Code Online (Sandbox Code Playgroud)\n
Sco*_*man 15
有问题的修饰符是.containerBackground(_:for:),它是 iOS 17 及相关平台版本中的新增内容。
使用它,您可以指定整个小部件的背景作为自定义视图的修饰符,例如:
\nVStack {\n Text("My widget")\n .foregroundStyle(.secondary)\n}\n.containerBackground(.red.gradient, for: .widget)\nRun Code Online (Sandbox Code Playgroud)\n请注意,在某些地方,例如,如果您的小部件以新的待机模式显示,则容器背景可能根本不显示。
\n您可以通过添加修饰符containerBackgroundRemovable(false)\xe2\x80\x93 来自定义此行为,尽管这可能会阻止您的小部件在某些上下文中完全显示。
\\.showsWidgetContainerBackground如果您处于背景未显示的上下文中,更好的选择是订阅环境变量来调整您的小部件。
更多详细信息,请参阅 WWDC 视频“将小部件带到新地方”。
\n| 归档时间: |
|
| 查看次数: |
10195 次 |
| 最近记录: |