Предисловие
У меня есть рабочая пользовательская анимация отбрасывания UITableViewCell
на iOS 10. Способ ее реализации выглядит следующим образом:
- Пользователь нажимает кнопку отправки
- Пользовательский вид создается, позиционируется и вставляется с нулевым индексом подтекстов
UITableViewCell
(под ячейкойcontentView
) -
contentView
анимируется вне кадра, а пользовательский альфа-просмотр анимируется до 1.0 - Когда
contentView
полностью выходит за рамки, вызывается собственныйUITableView
методdeleteRows(at: [indexPath], with: .top)
. СбойUITableViewCell
и пользовательское представление маскируется за предыдущимUITableViewCell
по мере его сбрасывания. - Ячейка (и, следовательно, все ее подпункты, включая мое пользовательское представление) удаляется.
Ниже приведена медленная анимация:
Примечание. tableView
имеет четкий цвет фона, позволяя отображать за ним пользовательский вид (синий). Каждая ячейка имеет containerView
, которая содержит все содержимое ячейки. containerView
и contentView
оба имеют четкие цвета фона. Все в порядке и денди.
Проблема
Миграция моего приложения на iOS 11, эта анимация больше не работает должным образом. Ниже приведена медленная анимация, которая больше не работает.
Как вы можете видеть, пользовательский вид накладывается поверх предыдущей ячейки при удалении соты без изменений в моем коде.
Исследование до сих пор
До сих пор я решил, что анатомия a UITableView
изменилась из этого:
UITableView
UITableViewWrapperView
cell
custom view
contentView
cell separator view
cell
cell
cell
UIView
UIImageView (scroll view indicator bottom)
UIImageView (scroll view indicator right)
Для этого: (UITableViewWrapperView
был удален)
UITableView
cell
custom view
contentView
cell separator view
cell
cell
cell
UIView
UIImageView (scroll view indicator bottom)
UIImageView (scroll view indicator right)
Одна вещь, которую я заметил об этом UITableWrapperView
, заключается в том, что его свойство isOpaque
имеет значение true, а свойство masksToBounds
- false, а UITableView
и все UITableViewCell
противоположны. Поскольку это представление было удалено в iOS 11, это может способствовать тому, что у меня есть ошибочный эффект. Я действительно не знаю.
Edit: Еще одна вещь, которую я обнаружил, заключалась в том, что UITableWrapperView
в рабочем примере вставляет тайну UIView
в нулевом индексе ее subviews (все UITableViewCell
s), для свойств которой isOpaque
установлено значение true и он имеет compositingFilter
. Это представление впоследствии удаляется после завершения анимации. Поскольку UITableWrapperView
удаляется в iOS 11, это представление также связывается с ассоциацией.
Вопрос
Прежде всего, кто-нибудь знает, почему это изменение в поведении происходит? Если нет, есть ли альтернативный способ добиться эффекта, который лучше работает в iOS 10? Я хочу clear UITableViewCell
, но у вас есть пользовательский вид, который отображается за каждой ячейкой при увольнении, который маскируется другим clear UITableViewCell
при увольнении, как показано в первом примере gif выше.