Как изменить высоту UITableView для соответствия его динамическому содержимому? - PullRequest
3 голосов
/ 25 августа 2011

У меня есть UITableView, который содержит ячейку, которая в свою очередь содержит TTTextEditor (элемент управления Three20), который для всех намерений и целей является UITextView. Я использую TTTextEditor, чтобы пользователь мог вводить динамический объем текста, а когда размер элемента управления изменяется, я использую метод делегата, чтобы соответственно увеличить высоту содержащейся ячейки. Пока все хорошо.

Когда я закончил редактирование, когда ячейка стала выше, таблица перестала прокручиваться так, чтобы охватить содержимое. Я предполагаю, что мне нужно отрегулировать высоту стола, чтобы компенсировать увеличение высоты ячейки, но все, что я пытаюсь, похоже, не дает эффекта. Прочитав, я пытаюсь это:

CGRect frame = [self.tableView frame];
CGSize contentSize = self.tableView.contentSize;

[self.tableView setFrame:CGRectMake(frame.origin.x, 
                                    frame.origin.y, 
                                    frame.size.width, 
                                    contentSize.height)];

Но это не работает - высота кадра увеличивается, но не до правильной высоты, и в любом случае таблица прокручивается не больше, чем изначально. Я также попытался метод sizeToFit на tableView без успеха.

Кто-нибудь знает, как я могу увеличить высоту прокручиваемой таблицы?

Ответы [ 2 ]

5 голосов
/ 25 августа 2011

Вам нужно установить contentSize, а не frame.Подсчитайте, какой размер ДОЛЖЕН быть, и затем установите его.Это может потребовать некоторых расчетов с вашей стороны.Если вы имеете дело с текстом, вы можете посмотреть на метод, добавленный к NSString, который называется sizeWithFont:constrainedToSize:lineBreakMode:.С другой стороны, ваш кадр должен всегда иметь размер видимой области, а НЕ прокручиваемой области.

РЕДАКТИРОВАТЬ: Обратите внимание, что для исходных макетов, которые не меняются в этот момент, вы, вероятно, захотитеиспользуйте стандартный механизм делегирования таблиц - (CGFloat) tableView: (UITableView *) tableView heightForRowAtIndexPath: (NSIndexPath *) indexPath, но когда это нужно динамически изменить, как в этой ситуации, я думаю, что настройка размера контента стоит попробовать.

2 голосов
/ 25 августа 2011

Первое, что вам нужно сделать, это реализовать метод -tableView:heightForRowAtIndexPath: делегата табличного представления.В этом методе вы указываете высоту каждой строки таблицы.Если некоторые строки в вашей таблице имеют высоту, которая отличается от других, вам нужно , чтобы реализовать это.

Когда этот метод вызывается для строки вашего текстового редактора, просто найдите высоту представленияи верните его.

Второе, что вам нужно сделать, - сказать табличному представлению обновляться при изменении высоты редактора.Я не знаю, как работает TTTextEditor, но вы можете проверить это для UITextView, реализовав, например, метод его делегата -textViewDidChange:.Как только вы узнаете, что высота редактора изменилась, просто вызовите метод -reloadData представления таблицы - он должен соответствующим образом отрегулировать высоту таблицы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...