UITableView reloadSection и reloadRowsAtIndexPaths вызывает странную анимацию
Я делаю ленивую загрузку для своего UITableView, поэтому я пытаюсь перезагрузить отдельные строки по мере обновления изображений. Однако я столкнулся с какой-то странной проблемой.
Когда я звоню,
[self.bubbleTableView reloadRowsAtIndexPaths:[NSArray arrayWithObjects:indexPath, nil] withRowAnimation:UITableViewRowAnimationNone];
ИЛИ
[self.bubbleTableView reloadSections:[NSIndexSet indexSetWithIndex:[indexPath section]] withRowAnimation:UITableViewRowAnimationNone];
Когда я конкретно говорю "Нет анимации", он все еще оживляет, а анимация - это изображение, которое занимает всю ячейку и быстро сокращается до нормального размера. Кроме того, если я изменю его на любую другую анимацию, он будет делать ту же анимацию, независимо от того, какая настройка.
Если я прокомментирую какой-либо из них и просто использую reloadData, он отлично работает, но я бы предпочел не делать reloadData по соображениям производительности для повторного заполнения ячеек, которые не нуждаются в обновлении.
Спасибо!
Ответы
Ответ 1
Вот был ответ
[UIView setAnimationsEnabled:NO];
[self.bubbleTableView reloadSections:[NSIndexSet indexSetWithIndex:[indexPath section]] withRowAnimation:UITableViewRowAnimationNone];
[UIView setAnimationsEnabled:YES];
Это работает для меня.
UPD. То же, что и блок by @Şafak-gezer
[UIView performWithoutAnimation:^{
[self.bubbleTableView reloadSections:[NSIndexSet indexSetWithIndex:[indexPath section]] withRowAnimation:UITableViewRowAnimationNone];
}];
СВИФТ
UIView.performWithoutAnimation {
self.bubbleTableView.reloadSections(NSIndexSet(index: indexPath.section), withRowAnimation: UITableViewRowAnimation.None)
}
Ответ 2
Ниже метод работал у меня: (для iOS 7 и выше)
[UIView performWithoutAnimation:^{
[tableView reloadSections:[NSIndexSet indexSetWithIndex:[indexPath section]] withRowAnimation:UITableViewRowAnimationNone];
}];
Ответ 3
Используйте cellForRowAtIndexPath:
, чтобы обновить интересующую вас ячейку.
Ответ 4
Я обнаружил, что это происходит со мной на симуляторе iOS. После нескольких перезагрузок он работал нормально без анимации. Может быть просто ошибка в симуляторе.