Я создаю собственный список, отображающий информацию о времени (минуты и секунды, которые не используются в приведенном ниже фрагменте для упрощения кода). Мне удалось реализовать красивую анимацию, когда пользователь добавляет запись в список, но при удалении записи нет анимации (1-й GIF).
В iOS 14 анимация работает, однако анимация удаляет только последний прямоугольник из списка, а затем обновляет текст в каждой строке (2-й GIF). Это не то, чего я хочу. Моя цель состоит в том, чтобы, если строка была удалена, другие строки должны заполнить это пространство и соответственно переместиться - с анимацией.
Возможно, что-то не так с идентификаторами строк, но я просто не смог это исправить. Спасибо за помощь!


struct ContentView: Просмотр { @State var минуты = [0] @State var секунды = [0] @State var selectedElement = 0 var body: some View { ПрокруткаView(){ VStack{ ForEach(минуты.indices, id: \.self){ элемент в ZStack{ EntryBackground() Text("\(self.MINUT[elem])") .transition(AnyTransition.scale) HStack{ Кнопка (действие: { withAnimation(.spring()){ self.секунды.удалить (в: элем) self.minites.remove(at: elem) } }) { Изображение (имя системы: «минус.круг.заполнение») .foregroundColor(Цвет.красный) .font(.system(размер: 22)) .padding(.leading, 10) } Разделитель() } } .padding(.горизонтальный) .padding(.top) .contentShape(Прямоугольник()) .onTapGesture { withAnimation(.spring()){ self.selectedElement = элемент } } } } Разделитель() Кнопка (действие: { с анимацией { self.минуты.добавление(само.минуты.счет) self.секунды.добавление(0) } }) { ZStack{ EntryBackground() Текст("Добавить") HStack{ Изображение (имя системы: «plus.circle.fill») .foregroundColor(Цвет.зеленый) .font(.system(размер: 22)) .padding(.leading, 10) Разделитель() } }.padding() } } } } структура EntryBackground: Просмотр { var body: some View { Прямоугольник() .cornerRadius(12) .frame(высота: 40) .foregroundColor(Color.gray.opacity(0.15)) } }
Мобильная версия