1. ホーム
  2. ios

[解決済み] UITableViewの動的なセルの高さは、スクロールした後にのみ正しくなります。

2022-07-30 09:08:47

質問

私は UITableView に、カスタム UITableViewCell は、オートレイアウトを使用してストーリーボードで定義されています。このセルには、複数の複数行の UILabels .

UITableView はセルの高さを適切に計算しているように見えますが、最初の数セルではその高さがラベル間で適切に分割されていません。 少しスクロールすると、すべてが期待どおりに動作します (最初に不正確だったセルも)。

- (void)viewDidLoad {
    [super viewDidLoad]
    // ...
    self.tableView.rowHeight = UITableViewAutomaticDimension;
}


- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    TableViewCell *cell = [self.tableView dequeueReusableCellWithIdentifier:@"TestCell"];
    // ...
    // Set label.text for variable length string.
    return cell;
}

自動レイアウトが最初の数回で機能しない原因として、私が見落としている可能性のあるものはありますか?

私は サンプル プロジェクト を作成し、この挙動を実証しています。

どのように解決するのですか?

これは明確に文書化されているかどうか分かりませんが、"left "に [cell layoutIfNeeded] を追加すると解決します。

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    TableViewCell *cell = [self.tableView dequeueReusableCellWithIdentifier:@"TestCell"];
    NSUInteger n1 = firstLabelWordCount[indexPath.row];
    NSUInteger n2 = secondLabelWordCount[indexPath.row];
    [cell setNumberOfWordsForFirstLabel:n1 secondLabel:n2];

    [cell layoutIfNeeded]; // <- added

    return cell;
}