У меня есть UITableView с ячейкой с динамическим размером, чтобы она соответствовала UITextView внутри. Всякий раз, когда вводится ключ, ячейка проверяет, увеличилась ли подсчитанная высота, как и в новой строке, поэтому она может указать таблице, что высота ячейки должна быть пересчитана. Я делаю это с помощью этого кода.UITableView Scrolls to Top on Cell Refresh
- (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
}
}
Оценки размера и стола как ожидалось. Но вместо того, чтобы просто оживлять изменение высоты, он также прокручивается вверх. Это можно увидеть здесь, нажав клавишу возврата.
По Key Value Наблюдающий, я обнаружил, что вид прокрутки contentOffset создается, когда contentSize меняет взгляд скроллинга. И что contentSize меняет много раз, когда вызывается метод endUpdates. Когда он меняется, он идет от нормальной высоты, до довольно большой высоты, а затем возвращается к нормальной высоте. Интересно, будет ли это из-за этого. Я не знаю, куда идти отсюда.
Вопрос: почему вы пытаетесь изменить размер табличного представления, а не просто изменять размер ячейки? Обычно рамка tableview остается постоянной и изменяется контент. – Frankie
Нет, я не трогаю рамку или рамки таблицы.Я изменяю размер ячейки, сообщая табличному представлению пересчитать все высоты ячеек. – Jadar