IOS 11 UITableView удаляет строки анимации
видео ошибки анимации tableview
У меня есть табличный вид, который расширяет/сворачивает его ячейки.
Начиная с iOS 11, tableView начинает вести себя странно при вставке и удалении строк.
ContentSize изменился до того, как произошел блок анимации, и, следовательно, в видео вы увидите, что на коллапсирующих ячейках происходит прокрутка назад. Анимация выглядит неправильно.
Этот код отлично работал на iOS 10. Кто-нибудь знает, что изменилось со стороны Apple? Это известная проблема?
public func insertingRowsForAccordion(_ indexArray: [IndexPath], selectedRowIndex: Int) {
beginUpdates()
insertRows(at: indexArray, with: UITableViewRowAnimation.fade)
endUpdates()
// Scroll to selection after expanding children
scrollToRow(at: IndexPath(row: selectedRowIndex, section: 0), at: UITableViewScrollPosition.top, animated: true)
}
public func removeRowsForAccordion(_ indexArray: [IndexPath]) {
beginUpdates()
deleteRows(at: indexArray, with: UITableViewRowAnimation.fade)
endUpdates()
}
Ответы
Ответ 1
У меня было множество проблем с iOS 11 UITableView
. Переход к каждому UITableView
во всем моем приложении и выполнение следующих исправленных всех моих проблем.
Установите estimatedRowHeight
, estimatedSectionHeaderHeight
и estimatedSectionFooterHeight
в 0.
Источник: iOS 11 Плавающий заголовок TableView
Ответ 2
У меня была аналогичная проблема с анимацией удаления строки таблицы на iOS 11, иногда странно прокручивая ячейки таблицы (iOS 10 работал просто отлично). Что помогло реализовать этот метод делегата, возвращающий высоту строки:
- (CGFloat) tableView:(UITableView *)tableView estimatedHeightForRowAtIndexPath:(NSIndexPath *)indexPath
После этого оба iOS 10 и 11 работают нормально.
Ответ 3
В iOS 11.2 у меня была плохая анимация после удаления строки с использованием стандартных действий в строке. Я смог улучшить ситуацию, убрав операцию удаления строк и строк в CATransaction.
Сначала я отменяю действия над строкой и дождаюсь завершения этой анимации перед удалением строки из представления таблицы.
Он, по крайней мере, больше не смещается вокруг содержимого содержимого, но представляет собой длинную двухступенчатую анимацию. Я все еще ищу лучшее решение.
CATransaction.begin()
CATransaction.setCompletionBlock({
self.tableView.beginUpdates()
self.myViewModel?.items?.remove(at: indexPath.row)
self.tableView.deleteRows(at: [indexPath], with: UITableViewRowAnimation.top)
self.tableView.endUpdates()
})
self.tableView.setEditing(false, animated: true)
CATransaction.commit()
Ответ 4
Я исправил его, используя этот код:
self.tableView.beginUpdates()
// ...
self.tableView.endUpdates()
self.tableView.layer.removeAllAnimations()
Ответ 5
Частичное исправление, которое работает для меня, - настройка estimatedRowHeight
к большому количеству.
tableView.estimatedRowHeight = 1000