У меня есть UITableView с ячейкой, которая имеет динамический размер, чтобы соответствовать UITextView внутри него. Всякий раз, когда вводится ключ, ячейка проверяет, увеличилась ли подсчитанная высота, как и в новой строке, поэтому она может сообщить таблице, что высота ячейки должна быть пересчитана. Я делаю это с помощью этого кода.
- (void) createNoteCellViewDidUpdate: (CreateNoteCell*) cell {
CGFloat newHeight = [self tableView:self.tableView heightForRowAtIndexPath:CreateNoteCellIndexPath];
if (newHeight != CGRectGetHeight(cell.contentView.frame)) {
[self.tableView beginUpdates];
[self.tableView endUpdates]; // <- HERE IS WHERE THE CONTENT OFFSET CHANGES
}
}
Границы изменения размера и таблицы соответствуют ожиданиям. Но вместо того, чтобы просто оживлять изменение высоты, он также прокручивается вверх. Это можно увидеть здесь, нажав клавишу возврата.
По наблюдению за ключевым значением, я обнаружил, что представление содержимого прокруткиOffset устанавливается при изменении вида содержимого прокрутки. И что contentSize меняет много раз, когда вызывается метод endUpdates. Когда он меняется, он идет от нормальной высоты, до довольно большой высоты, а затем возвращается к нормальной высоте. Интересно, будет ли это из-за этого. Я не знаю, куда идти отсюда.