(Счастлив принять ответ в Swift или Objective-C)
В моем представлении таблицы есть несколько разделов, и когда нажата кнопка, я хочу вставить строку в конце раздела 0. Нажав кнопку еще раз, я хочу удалить ту же строку. Мой почти рабочий код выглядит следующим образом:
// model is an array of mutable arrays, one for each section
- (void)pressedAddRemove:(id)sender {
self.adding = !self.adding; // this is a BOOL property
self.navigationItem.rightBarButtonItem.title = (self.adding)? @"Remove" : @"Add";
// if adding, add an object to the end of section 0
// tell the table view to insert at that index path
[self.tableView beginUpdates];
NSMutableArray *sectionArray = self.model[0];
if (self.adding) {
NSIndexPath *insertionPath = [NSIndexPath indexPathForRow:sectionArray.count inSection:0];
[sectionArray addObject:@{}];
[self.tableView insertRowsAtIndexPaths:@[insertionPath] withRowAnimation:UITableViewRowAnimationAutomatic];
// if removing, remove the object from the end of section 0
// tell the table view to remove at that index path
} else {
NSIndexPath *removalPath = [NSIndexPath indexPathForRow:sectionArray.count-1 inSection:0];
[sectionArray removeObject:[sectionArray lastObject]];
[self.tableView deleteRowsAtIndexPaths:@[removalPath] withRowAnimation:UITableViewRowAnimationAutomatic];
}
[self.tableView endUpdates];
}
Это ведет себя правильно иногда, но иногда нет, в зависимости от того, где прокручивается вид таблицы:
- Раздел 0 на самом верху, contentOffset.y == 0: отлично работает, строка вставлена и материал ниже раздела 0 анимирует вниз
- Раздел 0 невидим, потому что прокручивается таблица: отлично работает, видимый контент ниже новой строки анимируется вниз, как если бы над ним была вставлена строка.
- НО: если представление таблицы немного прокручивается, так что часть раздела 0 видна: она работает неправильно. В одном кадре все содержимое в представлении таблицы вскакивает (увеличивается смещение содержимого). Затем с анимацией добавляется новая строка, а содержимое таблицы просмотра прокручивается вниз (смещение содержимого уменьшается). Все заканчивается там, где оно должно быть, но процесс выглядит очень плохо с тем, что один кадр "прыгает" в начале.
Я вижу, что это происходит в замедленном движении симулятора с помощью "Debug- > Toggle Slow Animations". Эта же проблема возникает в обратном порядке при удалении.
Я обнаружил, что размер прыжка в смещении связан с тем, как далеко в разделе 0 прокручивается таблица: прыжок крошечный, когда смещение крошечное. Скачок становится больше, так как прокрутка приближается к половине общей высоты раздела 0 (проблема здесь в худшем случае, прыжок == половина высоты раздела). Прокручивая дальше, прыжок становится меньше. Когда таблица прокручивается так, что все еще видится только небольшое количество раздела 0, скачок крошечный.
Можете ли вы помочь мне понять, почему это и как исправить?