Резюме: В режиме редактирования я удаляю строки в представлении таблицы с помощью настраиваемого элемента управления редактирования, а не по умолчанию красный знак минус и кнопка подтверждения удаления. Отметьте строку или несколько строк, затем нажмите кнопку "Удалить" на панели инструментов. Это похоже на поведение, наблюдаемое в приложении Mail. Смотрите снимок экрана ниже.
Проблема:
Анимации, вызванные вызовами deleteRowsAtIndexPaths:withRowAnimation:
, являются нерегулярными. Например, вот что происходит, когда я использую анимацию строки Bottom (т.е. UITableViewRowAnimationBottom
), чтобы удалить отмеченную строку (Subject # 7) на снимке экрана:
- Тема # 8 слайдов внизу и сзади Тема # 7
- Тема # 8 кратко скрыта за темой # 7
- Тема # 8 заменяет тему # 7 jarringly
Это происходит как на симуляторе, так и на устройстве. Тип автоматической анимации (т.е. UITableViewRowAnimationAutomatic
) создает такое же неправильное поведение при удалении объекта № 7 выше.
Тип анимации Top работает так, как ожидалось, в симуляторе, но создает несовместимые, резкие анимации на устройстве.
Анимация типа Fade - это единственная анимация, которая работает как ожидалось как в симуляторе, так и на устройстве.
Подробнее
Я ориентируюсь на iOS 7, используя раскадровку, чистую автоматическую компоновку и Core Data.
Здесь метод действия, в котором я удаляю строки:
- (void)deleteButtonTapped:(UIBarButton *)sender
{
// update table view data
[self.listOfItems removeObjectsAtIndexes:self.indexSetOfTickedRows];
// create index paths for ticked rows
NSMutableArray *indexPaths = [[NSMutableArray alloc] init];
[self.indexSetOfTickedRows enumerateIndexesUsingBlock:^(NSUInteger idx, BOOL *stop) {
[indexPaths addObject:[NSIndexPath indexPathForRow:idx inSection:0]];
}];
[self.tableView deleteRowsAtIndexPaths:indexPaths withRowAnimation:UITableViewRowAnimationBottom];
// update Core Data and UI...
}
Что я пробовал:
Подкласс ячейки таблицы переопределяет layoutSubviews
. Однако нерегулярные анимации сохраняются, даже когда я прокомментирую layoutSubviews
.
Я также удалил настраиваемый элемент управления тиканием из ячеек таблицы, а затем жестко закодировал удаление определенной строки в методе действий. Неправильная анимация сохранялась.
Как было предложено другими, я пробовал звонить deleteRowsAtIndexPaths:withRowAnimation:
между вызовами beginUpdates
и endUpdates
. Это не решает проблему.
Любые предложения о том, что делать дальше или лучше догадываться, почему я вижу эти нерегулярные анимации?
Обновление (iOS 7.1):
Проблема остается после таргетинга на iOS 7.1. Будет продолжать полагаться на анимацию затухания.