UITableViewCell, UITextView с динамической высотой
Мне нужно сделать UITableViewCell
, который содержит много текста. Я знаю, что я могу добавить UITextView
в свою ячейку, но каждая запись не будет иметь одинакового количества текста.
Я знаю, что могу контролировать высоту UITableViewCell
с помощью -(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
, но это не совсем то, что я ищу.
Сценарий 1:
---------------
| First Cell |
---------------
---------------
| Second Cell |
| with some |
| text. |
---------------
---------------
| Third Cell |
---------------
Сценарий 2:
---------------
| First Cell |
---------------
---------------
| Second Cell |
| with some |
| more text and |
| an unknown |
| cell height. |
---------------
---------------
| Third Cell |
---------------
Ответы
Ответ 1
Используйте UILabel
для текста вашей ячейки. Затем вы можете использовать sizeWithFont:constrainedToSize:
для вычисления высоты этого UILabel внутри каждой ячейки. Например:
#define PADDING 10.0f
- (CGFloat)tableView:(UITableView *)t heightForRowAtIndexPath:(NSIndexPath *)indexPath {
NSString *text = [self.items objectAtIndex:indexPath.row];
CGSize textSize = [text sizeWithFont:[UIFont systemFontOfSize:14.0f] constrainedToSize:CGSizeMake(self.tableView.frame.size.width - PADDING * 3, 1000.0f)];
return textSize.height + PADDING * 3;
}
Ответ 2
Это довольно сложный материал, поскольку он включает такие вещи, как contentInset его текстового представления, которое вам нужно будет учитывать при расчете размера текста. Я написал свои знания и решение для расчета высоты UITableViewCell на основе внутреннего UITextView в моем блоге. Сообщение содержит код, который работает для универсальных приложений, стилей табличного вида и авторотации.
Ответ 3
Решение довольно простое и должно работать с iOS 7. Убедитесь, что параметр Scrolling Enabled
отключен выключен для UITextView
внутри UITableViewCell
в StoryBoard.
Затем в вашем UITableViewController viewDidLoad() установите tableView.rowHeight = UITableViewAutomaticDimension
и tableView.estimatedRowHeight > 0
, например:
override func viewDidLoad() {
super.viewDidLoad()
tableView.rowHeight = UITableViewAutomaticDimension
tableView.estimatedRowHeight = 44.0
}
Что это. Высота UITableViewCell
будет автоматически отрегулирована на основе внутренней высоты UITextView
.