3

我正在尝试创建一个包含两个嵌套列表视图的视图。这意味着主视图有行,每行也有行。由于重新排序要求(编辑模式)和滑动删除(仅限内行),我不能只使用带有滚动视图的 ForEach-loops。问题如下:当我点击“+add set”时,内部行不显示,尽管调试显示它们实际上是添加的。原因可能是外排的视图不适应其高度。我知道这一点,因为如果我只使用 ForEach 而没有 List,那么行会出现。但后来我不能使用滑动删除。这是内部行的代码(作为列表视图):

       List {
                ForEach(self.exercise.sets) { set in
                    SetRow(set: set, exercise: self.exercise)
                }.onDelete { (offsets) in
                    self.exercise.sets.remove(atOffsets: offsets)
                }
        }

每个外行在此列表之前都有 VStack(用于练习名称和列标题)和下面的按钮。看屏幕截图 没有List的内部列表,只有ForEach循环

添加了内行的所有对象,该行不出现

4

1 回答 1

1

似乎我找到了一种解决方法......外部列表在代码中如下所示:

 List() {

      Text("New workout").font(.title)

       ForEach(self.workoutModel.exercises) {exercise in
            ExerciseWorkoutView(exercise: exercise)
        }



  }

我只是将以下帧修饰符添加到了ExerciseWorkoutView(这是一个带有列表视图的VStack :

.frame(height: self.minFrameHeight + self.setRowHeight * CGFloat(self.exercise.sets.count)).animation(.default)

minFrameHeightsetRowHeight是我设置的常量。

self.exercise 是一个观察对象,其集合数组作为@Published实例变量。这就是框架高度自动适应的原因......

如果有人知道更好的解决方案,谢谢发帖。我已经尝试了.fixedSize(...)的几种变体,但没有奏效。

于 2019-10-11T07:28:52.263 回答