UITableViewで動的行の高さを実装する際に問題が発生しますが、問題が発生しているセルではなく、セルの内部にあるUILabelです。動的高さを持つUITableViewCellのUILabel
セルには、テキストを表示するためのUILabelが含まれています。私のtableView:heightForRowAtIndexPath:NSStringのsizeWithFont:メソッドを使用するラベルの高さを計算して、各セルのサイズを正しく変更しています。
私は、ストーリーボードに接続されているUILabelプロパティを保持しているUITableViewCellのサブクラスを持っています。ストーリーボードでは、その行を0に設定して、必要な数の行を使用するようにしました。そして、その行をWord Wrapに設定しました。ここで
は、私はセルを設定してい方法です:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
ExpandCell *cell = [tableView dequeueReusableCellWithIdentifier:@"Cell" forIndexPath:indexPath];
SomeObject *object = self.tableObjects[index.row];
cell.myLabel.text = [object cellText];
[cell.myLabel sizeToFit];
return cell;
}
私はこれをビルドすると、私はセルのすべてのコンテンツのための正しい高さにサイズ設定が、ラベルがすべてあると私のテーブルビューを取得します1行だけで細胞の側から流れ出る。しかし、テーブルをスクロールしてセルを画面から離れ、スクロールして戻すと、ラベルのサイズが正しく変更され、セルが最初にどのように見えるかが表示されます。
同じ方法でラベルのフレームを計算しようとしましたが、行の高さを計算していますが、同じ動作になります。画面からスクロールして再びオンになるまで、正しく描画されません。
私はこれを回避するには2つの方法を見つけましたが、いずれも解決策はありません。
最初に、viewDidAppearの場合:私はtableviewでreloadDataを呼び出すと、セルとラベルが最初に正しく描画されます。これは私の状況では動作しません。なぜなら、このテーブルにセルを追加したり削除したりするため、セルが追加されるたびにreloadDataを呼びたくないからです。
2番目の回避策は私にとっては非常に奇妙なようです。もしUILabelのデフォルトのSystem Font 17にフォント設定を残しておけば、セルは正しく描画されます。フォントサイズを変更すると、画面から離れて戻るか、tableViewでreloadDataが呼び出されるまで、ラベルを正しく描画しないという振る舞いに戻ります。
私はこのお手伝いをお待ちしております。
この投稿は正しく、問題に答えます。http://stackoverflow.com/questions/8903369/dynamic- uitableviewcell-height。ダイナミックなサイズのセルを作成したことがない人は少し難しいかもしれませんが、それほど難しいことではありません。 – macandyp
その答えのコードが、私がやっていることとは何か違うことをやっていることは、私は理解していません。私はcellForRowAtIndexPathに自分のラベルのフレームを設定していますが、次回の再描画までそのフレームを適用していません。または私は何かを逃していますか? – alivingston
heightForRowAtIndexPathを実装していますか? – macandyp