Пользовательский список SwiftUI с анимацией удаления ForEach не работаетIOS

Программируем под IOS
Ответить
Гость
 Пользовательский список SwiftUI с анимацией удаления ForEach не работает

Сообщение Гость »


Я создаю собственный список, отображающий информацию о времени (минуты и секунды, которые не используются в приведенном ниже фрагменте для упрощения кода). Мне удалось реализовать красивую анимацию, когда пользователь добавляет запись в список, но при удалении записи нет анимации (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)) } }
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «IOS»