UITableView reloadRowsAtIndexPaths скрывает строку

Я использую UITableView со статическими ячейками. Если я использую reloadData, чем все в порядке.

Если я попробую reloadRowsAtIndexPaths, он скрывает строку. Строка появляется, если я перетаскиваю таблицуView вверх (когда ячейка обновляется).

Ответ 1

У меня была та же проблема, кажется, ошибка. Я экспериментировал с некоторыми, и проблема не возникает, когда я устанавливаю параметр анимации UITableViewRowAnimationNone. Некоторые другие интересные вещи случаются, когда вы также устанавливаете эту опцию в UITableViewRowAnimationTop.

Ответ 2

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

Подумайте об этом так. Допустим, вы установили UITableViewAnimationOptionFade. Когда ячейка должна быть заменена, ячейка, которую нужно заменить (которая в этом случае является одним и тем же объектом), добавляет к ней добавленную анимацию. Затем в ячейку, которая заменяется (опять же, все тот же объект), добавлена ​​анимация постепенного уменьшения. В конце, ячейка на самом деле там, но она невидима, потому что анимация затухания сделала объект ячейки невидимым.

В нестатистическом представлении таблицы, в котором заменяющая ячейка является другим объектом, чем ячейка, подлежащая замене, это не проблема, так как анимации добавляются к двум различным объектам.

Ответ 3

Я решил это, удалив анимацию

tableView.reloadRows(at: [yourIndexPath], with: UITableView.RowAnimation.none)

Надеюсь, что это помогает любому, кто ищет это.