UITableView の セル毎に呼ばれる Delegate メソッドのtableView:heightForRowAtIndexPath:
の戻り値でセルの高さが決まる。
この時にそのセルに入れる文字列から高さを動的に変更する必要がある。
で、どうやるかというと NSString のboundingRectWithSize:options:attributes:context:
メソッド、または NSAttributedString のboundingRectWithSize:options:context:
メソッドを呼んで返ってくる CGRect の高さを使えばよい。
これらのメソッドでは自身が持つ文字列と引数に渡す矩形サイズ、フォント情報などから文字列が収まる適切な高さが設定された矩形を返してくれる。
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath { // セル内のラベルに表示させる文字列 NSString *labelText = self.textArray[indexPath.row]; // 最小でも高さ 80px は確保する return MAX([self calcHeight:labelText], 80); } // 文字列が収まる適切な高さを返す - (CGFloat)calcHeight:(NSString *)text { // 表示最大幅・高さ CGSize maxSize = CGSizeMake(260, CGFLOAT_MAX); // 文字列のフォント種類、サイズなど属性を指定 NSDictionary *attrDic = @{NSFontAttributeName:[UIFont systemFontOfSize:11.0]}; CGRect rect = [text boundingRectWithSize:maxSize options:NSStringDrawingUsesLineFragmentOrigin attributes:attrDicattrDic context:nil]; return rect.size.height; }
iOS8 からは自動でやってくれるようになったみたい。
iOS - ついにTableViewCellの高さが自動で調整してくれるようになった件!!! - Qiita
http://qiita.com/fmtonakai/items/c6b5c79ba32c1e33a34a