Вложенный список SwiftUI не отображается

Я пытаюсь создать представление с двумя вложенными представлениями списка. Это означает, что в главном представлении есть строки, и в каждой строке также есть строки. Из-за требования переупорядочения (режим редактирования) и смахивания для удаления (только внутренние строки) я не могу просто использовать циклы ForEach с просмотром прокрутки. Проблема в следующем: внутренние строки не отображаются, когда я нажимаю «+ добавить набор», хотя отладка показывает, что они действительно добавлены. причина может быть в том, что внешний вид внешнего ряда не адаптирует его высоту. Я знаю это, потому что, если я использую только 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 перед этим списком (для названия упражнения и заголовков столбцов) и кнопку ниже. см. снимки экрана  Внутренний список без списка, только цикл ForEach

Добавлен объект Althout для внутренней строки, строка не отображается


person user3122959    schedule 10.10.2019    source источник


Ответы (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)

minFrameHeight и setRowHeight - это установленные мной константы.

self.exercise - это наблюдаемый объект с массивом sets в качестве переменной экземпляра @Published. поэтому высота рамы адаптируется автоматически ...

если кто знает лучшее решение, спасибо за публикацию. Я уже пробовал несколько вариантов .fixedSize (...), но это не сработало.

person user3122959    schedule 11.10.2019
comment
Вы нашли лучшее решение? - person Benjamin Angeria; 25.08.2020