Twitter クライアントのようにテーブルのセルの高さを表示するテキストの内容によって変える方法です。

UITableViewCell に UILabel を入れて、numberOfLines をゼロにします。numberOfLines をゼロにすると行数の制限がなくなります。

次に tableView: heightForRowAtIndexPath: で表示する行によって必要な高さを計算します。NSString を表示するサイズを計算するには、sizeWithFont:constrainedToSize:lineBreakMode: を使用します。

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
  NSString* text = @"表示するテキスト";
  UIFont* font = [UIFont systemFontOfSize:12];
  // label は表示する UILabel
  CGSize size = CGSizeMake(label.size.width, 1000);
  CGSize textSize = [text sizeWithFont:font constrainedToSize:size lineBreakMode:UILineBreakModeCharacterWrap];

  float height = 50.0f; // セルの最低限の高さ

  // 元の UILabel よりも高さが高ければ高さを補正する
  float h = textSize.height - label.size.height;
  if (h > 0) {
	height += h;
  }
  return height;
}

最後に tableView: cellForRowAtIndexPath: で実際にセルに各値を入れるときに、UILabel の高さを上記の計算で出した高さに変更すれば OK です。

関連する投稿