2016-03-23 1 views
2

Я искал и не могу найти решение этой проблемы. Мой текущий код основан на Reload section without reloading section header.UITableView прыгает при расширении ячейки с автозагрузкой.

Я пытаюсь вырастить ячейку uitableview, когда пользователь нажимает на камеру. У меня есть подкласс UITableViewCell с UILabel, который первоначально ограничен двумя строками текста. Когда пользователь нажимает на UILabel, я устанавливаю свойство numberOfLines в UILabel равным 0, поэтому он расширяется до количества строк по мере необходимости.

Вот мой код из Tableview: didSelectRowAtIndexPath:

if (((NSNumber *)expandedCells[indexPath.section]).boolValue) 
{ 
    labelExpandingCell.cellLabel.numberOfLines = 10; 
} else 
{ 
    labelExpandingCell.cellLabel.numberOfLines = 3; 
} 
[UIView setAnimationsEnabled:NO]; 
[self.tableView beginUpdates]; 
[self.tableView setNeedsDisplay]; 
[self.tableView endUpdates]; 
[UIView setAnimationsEnabled:YES]; 

Иногда это работает отлично, как правило, когда contentOffset.y == в UITableView в 0. Обычно TableView прыгает в заднее 100 пикселей или около того, когда я исполняю этот код. Вот пример журнала до и после запуска этого кода.

2016-03-25 14: 57: 08,549 TableViewTest [485: 129926] Содержание смещения перед обновлением: 153,500000 2016-03-25 14: 57: 08,568 TableViewTest [485: 129926] Содержание смещения после обновления: 136,500000

Почему автозапуск должен приводить к тому, что мой рабочий стол сканируется назад, когда я расширяю видимую ячейку?

+0

Я получаю что-то подобное с кодом, который раньше работал. Не уверен, когда это началось. iOS 9 sdk возможно? Конечно, не нужно возвращаться к настройке высоты ячейки вручную! –

ответ

3

Я исправил эту проблему, внедряя метод оценочногоHeightForRowAtIndexPath в своем делегате tableview. Я считаю, что проблема заключалась в том, что tableview не правильно оценивал высоту предыдущих разделов в моем представлении таблицы без реализации этого метода, тем самым прыгая, когда я обновляю раздел в представлении таблицы.

+0

Да, я решил, добавив высоту исправления и удалив оценочныйHeight .. :) –

0

Установили UITableView вы

tableView.rowHeight = UITableViewAutomaticDimension tableView.estimatedRowHeight = DEFAULT_ROW_HEIGHT

Если да, проверьте, чтобы ваши UILabel ограничения правильно применены к ячейке. Вы можете избежать применения метода "measuredHeightForRowAtIndexPath", если вы установили два вышеуказанных свойства.

+0

это не работает для меня! – Archerlly