UITableViewCell, UITextView с динамической высотой - PullRequest
28 голосов
/ 03 февраля 2011

Мне нужно сделать 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    |
 ---------------

Ответы [ 3 ]

34 голосов
/ 03 февраля 2011

Используйте 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;
}
4 голосов
/ 26 августа 2017

Решение довольно простое и должно работать с iOS 7. Убедитесь, что параметр Scrolling Enabled выключен выключен для UITextView внутри UITableViewCell в StoryBoard.

Затем в viewDidLoad () вашего UITableViewController установите tableView.rowHeight = UITableViewAutomaticDimension и tableView.estimatedRowHeight > 0, например:

override func viewDidLoad() {
    super.viewDidLoad()

    tableView.rowHeight = UITableViewAutomaticDimension
    tableView.estimatedRowHeight = 44.0
}

Вот и все.Высота UITableViewCell будет автоматически отрегулирована на основе внутренней высоты UITextView.

2 голосов
/ 04 декабря 2012

Это довольно сложная вещь, поскольку она включает такие вещи, как contentInset текстового представления, которое вы должны будете учитывать при расчете размера текста.Я написал свои уроки и решение для вычисления высоты UITableViewCell на основе внутреннего UITextView в моем блоге.Пост содержит код, который работает для универсальных приложений, как для стилей табличного представления, так и для автоматического поворота.

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