1

プログラムで生成されたカスタムには、テキストをラップできるもの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) が常に正しい高さで表示されるようにするにはどうすればよいですか?

4

2 に答える 2

0

したがって、セルの高さが自動的に調整され、必要に応じて UILabels が複数の行を表示することを期待しています。

あなたの「だから」は少し時期尚早です。自動セルの高さには別の要件がありますが、満足できない場合があります。セルのコンテンツ ビューの高さは、コンテンツ ビューとそのサブビューの間に固定された制約によって内側から外側に決定する必要があります。

したがって、セルにラベルがある場合でも、その上部と下部が制約によってセルのコンテンツ ビューの上部と下部に固定されていなければ、何も起こりません。そして、あなたの質問では、彼らがそうであるとは言いませんでした。

于 2015-05-28T15:06:21.347 に答える