Когда я использую Auto Layout, чтобы выбрать высоту каждой ячейки (чтобы они были динамическими), это в основном работает, но некоторые ячейки немного короткие. Почему это?
Пример проекта: http://cl.ly/2j0A1J203f3h
Я пытаюсь использовать Auto Layout для динамического определения высоты каждой ячейки, чтобы в одной ячейке было больше содержимого, чем в другой. Для этого я используюэтот ответ Stackoverflow исопровождающий пример GitHub.
у меня естьUITableViewCell
подкласс называетсяCSPostCell
что я создал в раскадровке и положитьUILabel
не более 5 строк текста на этикетке.
Просто для примера, у меня есть только две ячейки в таблице и как две разные части текста для меток (одна длиннее), которая установлена вcellForRowAtIndexPath:
:
- (CSPostCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
CSPostCell *cell = [tableView dequeueReusableCellWithIdentifier:@"SelfPostCell" forIndexPath:indexPath];
cell.postTitle.text = indexPath.row == 0 ? @"Short title" : @"Long long long title. Holy crap this is one long title. When does it end? Oh right now.";
[cell setNeedsUpdateConstraints];
return cell;
}
Затем я возвращаю высоту каждой ячейки как таковую:
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
CSPostCell *cell = [tableView dequeueReusableCellWithIdentifier:@"SelfPostCell"];
cell.postTitle.text = indexPath.row == 0 ? @"Short title" : @"Long long long title. Holy crap this is one long title. When does it end? Oh right now.";
cell.postTitle.preferredMaxLayoutWidth = tableView.bounds.size.width - 40;
[cell setNeedsUpdateConstraints];
[cell updateConstraintsIfNeeded];
[cell.contentView setNeedsLayout];
[cell.contentView layoutIfNeeded];
CGFloat height = [cell.contentView systemLayoutSizeFittingSize:UILayoutFittingCompressedSize].height;
return height;
}
Который является более или менее точной копиейПример репозитория GitHub.
Однако, когда я запускаю приложение в симуляторе, оно работает не совсем так, как должно. Высоты являются динамическими и корректируются для более длинных фрагментов текста, но не настолько, чтобы текст не обрезался. Смотрите изображение ниже:
В этом вышеприведенном случае метка второй ячейки должна показывать другую строку для завершения текста, но она обрезается.
Почему не отображается весь текст?