为什么某些视图在小部件中显示为红色禁止进入标志?
Why do some views appear as a red no entry sign in widgets?
我在 xcode 12 中创建了一个项目并添加了一个 Widget Extension 目标。目标已创建,我只剩下一个显示时间的简单小部件。小部件的预览按预期工作,并且小部件在模拟器中按预期显示。但是如果我将视图更改为使用 List
而不是 Text
,就像这样:
struct SimpleWidgetEntryView : View {
var entry: Provider.Entry
var body: some View {
List {
Text("Something")
}
}
}
预览和模拟器都显示黄色背景上的红色禁止进入标志:
我试过将 List
放入 VStack
并使用动态列表,但没有成功。我找不到任何关于 List
在小部件中被禁止的文档。我试过重新启动 xcode 和模拟器,清理和重建。我正在使用 xcode 12.0 beta 3.
~我在尝试使用包裹在 UIViewRepresentable
中的 UIView
时也遇到了这个问题。该视图是来自图表库的 LineChartView
。~ 编辑:根据 this post on the Apple developer forums,不可能在 WidgetKit 小部件中使用 UIKit 视图。
有人知道如何在小部件中使用 List
吗?非常感谢任何帮助。谢谢
在尝试使用 UIViewRepresentable 包装器包含来自图表库(UIView 的子类)的图表后,我得到了这个黄色的禁止进入(没有幽灵笑声的捉鬼敢死队)标志。我找不到任何地方记录的黄色禁止进入标志,也不确定它是来自图表库还是 iOS 本身,所以很高兴看到你看到了同样的问题,这让我很欣慰提出解决方案的正确途径。
根据您在上面引用的这个 post,一位 Apple 工程师说“包装在 UIViewRepresentable 中的 UIKit 视图在 WidgetKit 中不起作用。当视图从您的扩展中编码以显示时,它们将显示为空白。” .我认为这并不完全准确。我认为它会显示为黄色并带有红色“禁止进入”标志。
https://developer.apple.com/forums/thread/653471?answerId=619627022#619627022
我通过将图表呈现为 UIImage 并在小部件而不是图表的 UIView 版本上显示图像来解决这个问题。这应该足以满足我的目的,因为我不需要它像我在应用程序中那样具有交互性。
在 VStack 中使用 ForEach:
var body: some View{
ZStack{
self.backgroundColor
VStack{
ForEach(0...1, id: \.self){ entry in
Text("\(entry)")
}
}
}
}
背景
小部件视图是 静态。
它们不支持动画、导航和用户交互(Link
除外)。而且它们必须用纯 SwiftUI 编写。
WidgetKit 中不允许的视图列表
请注意,该列表并不详尽,主要提供示例:
交互式 视图(您可以与之交互的视图,例如,通过触摸它们):
List
Form
ScrollView
TabView
Map
Picker
Slider
- 等等...
动画 观看次数:
ProgressView
导航 视图(您不能使用 标准 导航 - 为此您有 Link
):
NavigationView
NavigationLink
UIKit 包装器 用于 UIKit Views/ViewControllers:
UIViewRepresentable
UIViewControllerRepresentable
替换
如果您想使用上述任何视图,例如像 List
这样的 交互式 视图,您需要从 non-interactive 视图中创建它 - 这里 VStack
+ ForEach
.
我在 xcode 12 中创建了一个项目并添加了一个 Widget Extension 目标。目标已创建,我只剩下一个显示时间的简单小部件。小部件的预览按预期工作,并且小部件在模拟器中按预期显示。但是如果我将视图更改为使用 List
而不是 Text
,就像这样:
struct SimpleWidgetEntryView : View {
var entry: Provider.Entry
var body: some View {
List {
Text("Something")
}
}
}
预览和模拟器都显示黄色背景上的红色禁止进入标志:
我试过将 List
放入 VStack
并使用动态列表,但没有成功。我找不到任何关于 List
在小部件中被禁止的文档。我试过重新启动 xcode 和模拟器,清理和重建。我正在使用 xcode 12.0 beta 3.
~我在尝试使用包裹在 UIViewRepresentable
中的 UIView
时也遇到了这个问题。该视图是来自图表库的 LineChartView
。~ 编辑:根据 this post on the Apple developer forums,不可能在 WidgetKit 小部件中使用 UIKit 视图。
有人知道如何在小部件中使用 List
吗?非常感谢任何帮助。谢谢
在尝试使用 UIViewRepresentable 包装器包含来自图表库(UIView 的子类)的图表后,我得到了这个黄色的禁止进入(没有幽灵笑声的捉鬼敢死队)标志。我找不到任何地方记录的黄色禁止进入标志,也不确定它是来自图表库还是 iOS 本身,所以很高兴看到你看到了同样的问题,这让我很欣慰提出解决方案的正确途径。
根据您在上面引用的这个 post,一位 Apple 工程师说“包装在 UIViewRepresentable 中的 UIKit 视图在 WidgetKit 中不起作用。当视图从您的扩展中编码以显示时,它们将显示为空白。” .我认为这并不完全准确。我认为它会显示为黄色并带有红色“禁止进入”标志。
https://developer.apple.com/forums/thread/653471?answerId=619627022#619627022
我通过将图表呈现为 UIImage 并在小部件而不是图表的 UIView 版本上显示图像来解决这个问题。这应该足以满足我的目的,因为我不需要它像我在应用程序中那样具有交互性。
在 VStack 中使用 ForEach:
var body: some View{
ZStack{
self.backgroundColor
VStack{
ForEach(0...1, id: \.self){ entry in
Text("\(entry)")
}
}
}
}
背景
小部件视图是 静态。
它们不支持动画、导航和用户交互(Link
除外)。而且它们必须用纯 SwiftUI 编写。
WidgetKit 中不允许的视图列表
请注意,该列表并不详尽,主要提供示例:
交互式 视图(您可以与之交互的视图,例如,通过触摸它们):
List
Form
ScrollView
TabView
Map
Picker
Slider
- 等等...
动画 观看次数:
ProgressView
导航 视图(您不能使用 标准 导航 - 为此您有
Link
):NavigationView
NavigationLink
UIKit 包装器 用于 UIKit Views/ViewControllers:
UIViewRepresentable
UIViewControllerRepresentable
替换
如果您想使用上述任何视图,例如像 List
这样的 交互式 视图,您需要从 non-interactive 视图中创建它 - 这里 VStack
+ ForEach
.