UITableViewに動的な行の高さを実装する際に問題が発生していますが、問題が発生しているのはセルではなく、セル内のUILabelです。
セルには、テキストを表示するためのUILabelが含まれています。私のtableView:heightForRowAtIndexPath:は、NSStringのsizeWithFont:メソッドを使用して、セルに含まれるラベルの高さを計算することにより、各セルのサイズを正しく変更しています。
ストーリーボードに接続されているUILabelプロパティを保持するだけのUITableViewCellのサブクラスがあります。ストーリーボードでは、行を0に設定して、必要な数の行を使用するようにし、lineBreakをワードラップに設定しました。
セルの設定方法は次のとおりです。
- (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の場合:テーブルビューでreloadDataを呼び出すと、セルとラベルが最初に正しく描画されます。このテーブルにセルを追加および削除するため、これは私の状況では機能しません。セルが追加されるたびにreloadDataを呼び出したくありません。
2番目の回避策は、私には非常に奇妙に思えます。フォント設定をUILabelのデフォルトのシステムフォント17のままにすると、セルは正しく描画されます。フォントサイズを変更するとすぐに、画面を離れて戻るか、tableViewでreloadDataが呼び出されるまで、ラベルを正しく描画しないという動作に戻ります。
これで助けていただければ幸いです。