В настоящее время у меня есть UITableView
с изменением размера UITextView
. Ячейка автоматически изменяет размер, используя beginUpdates
/endUpdates
, но когда он делает это, просмотр таблицы заикается (см. Ниже gif).
Конечным результатом является UITableViewCell
, у которого есть текстовое представление, которое изменяет размер на основе его содержимого. Вот код внутри пользовательского класса UITableViewCell
, который заставляет UITableView
обновлять себя.
- (void)textViewDidChange:(UITextView *)textView {
// This is a category on UITableViewCell to get the [self superView] as the UITableView
UITableView *tableView = [self tableView];
if (tableView){
[tableView beginUpdates];
[tableView endUpdates];
}
}
Вот что я уже пробовал:
Получить текущий contentOffset
и сбросить его после endUpdates
, но не работать
Отключение прокрутки на UITableView
перед обновлениями и последующее включение впоследствии
Я пробовал возвращать NO
всегда из - (BOOL)textViewShouldEndEditing:(UITextView *)textView
Моя высота ячейки UITableView
использует UITableViewAutomaticDimension
. Любые другие идеи или мысли приветствуются.
Вот пример того, как он выглядит:
Я не хочу использовать какие-либо библиотеки, поэтому, пожалуйста, никаких предложений для этого.
Спасибо
Изменить: решение
Найдено здесь: Я не хочу, чтобы анимация начала обновления, конец блока обновлений для uitableview?
Кредит @JeffBowen для отличной находки (хотя хакки он работоспособен и позволяет мне по-прежнему внедрять методы UITableViewDelegate
для поддержки iOS 7). Отключите анимацию до выполнения обновления, а затем включите после обновления, чтобы предотвратить UITableView
от заикания.
[UIView setAnimationsEnabled:NO];
[tableView beginUpdates];
[tableView endUpdates];
[UIView setAnimationsEnabled:YES];
Если вам не нужно использовать методы Delegate и хотите использовать менее хакерское решение для iOS 8+, тогда перейдите к ответу @Massmaker ниже.