Я пытаюсь настроить размер UITableViewCell
на его содержание. Это в основном для просмотра чата, где я перечисляю все предыдущие сообщения и позволяю пользователю прокручивать содержимое беседы.Отрегулируйте размер UITableViewCell до его содержимого
Итак, у меня есть UITableView
с несколькими прототипами ячеек. Входящие текстовые сообщения, исходящие текстовые сообщения, входящие сообщения изображений, сообщения исходящих изображений и т. Д. Внутри содержимого каждой ячейки есть стандарт UIView
, который я намерен использовать для рисования чата. Этот вид занимает почти внутреннее пространство ячейки (8px смещение вверх, слева, внизу и справа, все вокруг). Внутри этого представления я хочу контент. В случае текстовых ячеек (входящих и исходящих) я хочу получить UITextView
, который отобразит текстовое сообщение. Это то, что я имею в виду:
В желтый является UIView
и внутри него UITextView
. Теперь я хочу настроить все на размер текста. Мне удалось выполнить следующее:
sizeToFit
выполняет именно то, что мне нужно дляUITextView
- Я все еще не уверен, как настроить «размер s к
UITextView
»UIView
размер s. - Чтобы настроить высоту ячейки, возможно, я мог бы использовать
heightForRowAtIndexPath
. Мне не нужно (и я не думаю, что должен) настроить ширину ячейки. Но несколько советов по этому поводу: когда этот метод называется? Будет ли ячейка уже создана? Будут ли уже выложены подпункты? В противном случае, как я могу определить размер контента?
Любой вход на это оценили!
Edit:
мне удалось сделать несколько прогрессирует, следуя учебник, отправленный @vikingosegundo, но я снова застрял. Это то, что у меня есть:
Таким образом, в основном: вид текста имеет ограничения для ведущих, отставая, расстояние до вершины, и расстояние до дна. С другой стороны, сдерживающий взгляд имеет ограничения для трейлинга и расстояния до вершины, так что если размер мал, то он привязывается вправо. Я не могу иметь ведущих ограничений или иначе он всегда будет использовать всю ширину ячейки. Я не уверен относительно расстояния до нижних ограничений.
При вводе небольшого сообщения это выглядит великолепно. Он имеет большой размер, и он стреляет вправо.
Однако длинные сообщения не охватывают несколько строк. Вместо этого он по-прежнему щелкает вправо (ОК), но ширина увеличивается влево, неопределенно.
Клетка уже регулировать его высоту до высоты запрещенного контента:
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
HyConversationTableViewCell * cell = (HyConversationTableViewCell *)[self tableView:tableView cellForRowAtIndexPath:indexPath];
CGSize size;
[cell setNeedsLayout];
[cell layoutIfNeeded];
size = [cell.textMessageView systemLayoutSizeFittingSize:UILayoutFittingCompressedSize];
return size.height + 32;
}
Я предполагаю, что мне сейчас нужно что-то вроде максимальной ширины текстового зрения или что-то, но я понимаете, что это невозможно. Как я могу это решить?
Редактировать: Если у меня было ведущее ограничение для содержащего представления, оно отлично выглядит, когда текст охватывает несколько строк, но не тогда, когда он этого не делает. Вот что он выглядит следующим образом:
И:
Edit: Как полагает Алекс Zavatone, я изменил tableView:heightForRowAtIndexPath:
на следующее:
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
HyConversationTableViewCell * cell = (HyConversationTableViewCell *)[self tableView:tableView cellForRowAtIndexPath:indexPath];
CGSize overflowSize = CGSizeMake(cell.textMessageView.frame.size.width, FLT_MAX);
CGSize sizeAdjusted = [cell.textMessageView sizeThatFits:overflowSize];
return sizeAdjusted.height + 32.0f;
}
Это показывает, немного лучше, поскольку высота уже настроена, но поведение несколько неустойчиво. Вот как это выглядит в самом начале:
Так высота правильно, но вид текста не регулирует его ширину. Кроме того, если я прокручиваю ячейки из экрана, а затем обратно (что заставляет их перерисовывать), они начинают вести себя беспорядочно в том, что кажется случайным критерием. Вот пример:
Иногда это происходит с двух последних клеток ...
Edit: Это последняя часть была зафиксирована настройка контента Приоритет обниматься и Content Приоритет сжатия Сопротивление к необходимости и искробезопасности Размер заполнитель. Теперь высота отображается правильно.
http://www.raywenderlich.com/73602/dynamic-table-view-cell-height-auto-layout – vikingosegundo
Удивительный учебник! Также, пожалуйста, см. Мое редактирование. –