UITableView удаляет анимацию строк, поврежденную ячейками с саморазмером - PullRequest
0 голосов
/ 07 ноября 2019

Я строю табличное представление с автоматически изменяющимися ячейками, поэтому я возвращаю UITableView.automaticDimension в качестве высоты ячеек. Теперь я удаляю ячейку, используя:

tableView.beginUpdates()
tableView.deleteRows(at: [indexPath], with: .left)
tableView.endUpdates()

Повторяющаяся анимация часто сбивается. Позвольте мне описать то, что я пробовал до сих пор и результаты. Мне не нужно заботиться о невидимых ячейках, поскольку анимация будет воспроизводиться только для видимых ячеек, поэтому я буду говорить только об этом. Кроме того, у меня нет верхнего / нижнего колонтитула.


Подход 1: Использование предполагаемой высоты

Это был мой первый подход - я просто вернул фактическую оценку для предполагаемой ячейкивысота. Это будет работать, если ячейка либо полностью на экране, либо частично видна внизу экрана. Если он частично находится за пределами экрана в верхней части экрана, анимация будет отображаться либо без анимации (поэтому весь контент скачет), либо анимированная ячейка внезапно сдвигается вниз, чтобы она полностью выглядела на экране, и затем анимация воспроизводится. Я также видел, как происходили другие глючные вещи, но большую часть времени это один из тех двух.

Подход 2: Использование автоматической расчетной высоты

Так что я подозреваю, что это из-зарасчетная высота ячеек. Когда вызывается код удаления, iOS начинает запрашивать приблизительную высоту для всех ячеек. Поэтому мой следующий подход - использовать UITableView.automaticDimension как для оценки, так и для реальной высоты ячейки, и посмотреть, будет ли это что-то делать. Изменений не так много, за исключением того, что ячейка, перемещаемая вниз, как в подходе 1, больше не происходит. Вместо этого никакая анимация не будет воспроизводиться каждый раз, когда ячейки не полностью отображаются на экране в верхней части экрана.

Подход 3: Использование фактической высоты ячейки в качестве расчетной высоты

При исследовании этого я читалиногда о людях, строящих «кэши высоты» для хранения высот ячеек и возвращающих их в estimatedHeightForCell. Я так и сделал, но оказалось, что на самом деле это ничего не меняет по сравнению с подходом 2.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...