iOS 14 小部件:使用列表时小部件不呈现

chn*_*ski 15 swift widgetkit swiftui swiftui-list ios14

我正在尝试使用 iOS 14 小部件并遇到一个奇怪的问题。当我List在小部件视图中使用 a 时,我的小部件没有加载。如果我用HStackVStack等一切工作正常。

为了举例,这里有一些简单的代码:

struct WidgetView: View {

   var body: some View {
    
       List {
           Text("Test 1")
           Text("Test 2")
       }
   }
}
Run Code Online (Sandbox Code Playgroud)

结果我看到了这张图片: 在此处输入图片说明

同样,这一切都适用于其他元素,这只发生在List.

J A*_*ngo 10

List 有一个小部件不支持的滚动功能,小部件只显示静态视图,请尝试使用 forEach。

例如:

struct SomeView: View {
    
    var body: some View {
        HStack {
            ForEach(1..<5) { index in
                otherView()
            }
        }
    }
}

Run Code Online (Sandbox Code Playgroud)

您可以根据需要和设计使用 HStack 或 VStack。


NSD*_*umb 6

Widgets不支持滚动,这个限制在苹果meet Widget视频中有讲到(视频中可以快进到12:02)

我遇到了完全相同的问题,有两个部分可以解决这个问题

  1. 确保您的模型符合Identifiable协议或至少有一个字段作为主键

示例:假设您有一个名为 Task 的结构

   struct Task: Identifiable {
   let title,id:String
   }
Run Code Online (Sandbox Code Playgroud)

这是TimelineEntry结构的样子

struct TaskEntry: TimelineEntry {
let tasks: [Task]
let date: Date
}
Run Code Online (Sandbox Code Playgroud)
  1. 完成此操作后,您可以使用ForEach循环来使用数组构建视图

    struct ToDoAppWidgetEntryView : View {
    var entry: Provider.Entry
    
    var body: some View {
     VStack{
         ForEach(entry.tasks, id:\.id){
             item in
             Text(item.title)
             Divider()
         }
        }
       }
    }
    
    Run Code Online (Sandbox Code Playgroud)

这是预览的样子

在此处输入图片说明