Kiedy używam Auto Layout do wybierania wysokości każdej komórki (więc są dynamiczne), to działa głównie, ale niektóre komórki są trochę krótkie. Dlaczego to?

Przykładowy projekt: http://cl.ly/2j0A1J203f3h

Próbuję użyć automatycznego układu do dynamicznego określania wysokości każdej komórki, więc niektóre komórki mogą przechowywać więcej treści niż inne. Aby to zrobić, używamta odpowiedź Stackoverflow itowarzyszący przykład GitHub.

mamUITableViewCell podklasa o nazwieCSPostCell które stworzyłem w serii ujęć i umieściłemUILabel z maksymalnie 5 liniami tekstu na etykiecie.

Tylko na przykład, mam tylko dwie komórki w tabeli i jako takie dwa różne fragmenty tekstu dla etykiet (jedna jest dłuższa), która jest ustawiona wcellForRowAtIndexPath::

- (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;
}

Następnie zwracam wysokość każdej komórki jako takiej:

- (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;
}

Która jest mniej więcej dokładną kopią zPrzykład repo GitHub.

Jednak po uruchomieniu aplikacji w symulatorze nie działa to tak jak powinno. Wysokości są dynamiczne i dostosowują się do dłuższych fragmentów tekstu, ale nie na tyle, aby tekst nie został obcięty. Zobacz obraz poniżej:

W powyższym przypadku etykieta drugiej komórki powinna pokazać kolejną linię, aby zakończyć tekst, ale zostaje odcięta.

Dlaczego nie wyświetla całego tekstu?

questionAnswers(1)

yourAnswerToTheQuestion