プログラムで生成されたカスタムには、テキストをラップできるものUITableViewCell
がいくつか含まれています。UILabel
newLabel.numberOfLines = 0;
newLabel.lineBreakMode = NSLineBreakByWordWrapping;
これらのセルをUITableView
次のパラメーターで使用します。
self.tableView.estimatedRowHeight = 120.0;
self.tableView.rowHeight = UITableViewAutomaticDimension;
UILabel
したがって、セルの高さが自動的に調整され、必要に応じて複数の行が表示されることを期待しています。
これは新しく作成されたセルでは機能しなかったため、 で強制的にUITableView
更新を実行しましたviewDidAppear
。
- (void)viewDidAppear:(BOOL)animated
{
[super viewDidAppear:animated];
if (self.appearsFirstTime) {
dispatch_async(dispatch_get_main_queue(), ^{
[self.tableView beginUpdates];
[self.tableView endUpdates];
self.appearsFirstTime = NO;
});
}
}
UITableView
これは、 が最初に出現したときに生成され、更新時にすでに存在していたセルに適しています。ただし、後でスクロールして生成されたセルには機能しません。これらの後で初期化されたセルは、更新の恩恵を受ける機会がないため、高さが正しくありません。
問題を解決する別のアプローチを見つけました: https://stackoverflow.com/a/25967370/4943710 しかし、このアプローチは、レイアウト プロセスに複数のパスが必要になる可能性があるという事実に悩まされています。このアプローチはその後、不正確な高さにつながる中間結果を処理します。結果は再びテキストの行が欠落しています。さらに、セルは後の更新で適応する能力を失うようです (たとえば、インターフェイスの向きを変更する場合)。
ここで私の質問:
後で生成されたセル (を更新した後UITableView
) が常に正しい高さで表示されるようにするにはどうすればよいですか?