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

时间:2020-08-02 13:34:16

标签: ios swift swiftui swiftui-list ios14

我正在尝试使用iOS 14小部件,但有一个奇怪的问题。在窗口小部件视图中使用List时,窗口小部件未加载。如果我使用的是HStackVStack等,一切正常。

为示例起见,下面是一些简单的代码:

struct WidgetView: View {

   var body: some View {
    
       List {
           Text("Test 1")
           Text("Test 2")
       }
   }
}

我看到以下结果: enter image description here

同样,这一切都可以与其他元素很好地配合,只有List才会发生这种情况。

2 个答案:

答案 0 :(得分:6)

列表具有窗口小部件不支持的滚动功能,窗口小部件仅显示静态视图,而尝试使用forEach。

例如:

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

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

答案 1 :(得分:3)

窗口小部件不支持滚动,meet widget video of apple中讨论了此限制(您可以在视频中快进至12:02)

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

  1. 确保您的模型符合Identifiable协议的要求,或者至少有一个字段充当主键

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

   struct Task: Identifiable {
   let title,id:String
   }

这是TimelineEntry结构的样子

struct TaskEntry: TimelineEntry {
let tasks: [Task]
let date: Date
}
  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()
         }
        }
       }
    }
    

这是预览的样子

enter image description here