酒と泪とRubyとRailsと

Ruby on Rails と Objective-C は酒の肴です!

UITableViewCellの高さを文字数に合わせて可変にする

UITableViewCellの高さをその中の文字数に合わせて可変にするコードです。意外と調べるのに苦労したんですが、結構簡単にかけて色々使いそうなのでメモしておきます!


StoryBoard

Labelのlineは0にする。

実装コード

UITableViewControllerの実装側のコードはこちら。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
    // textの文字数に合わせてCellの高さを修正する
    return [self textHeight:_text];

}

// textを格納した場合の高さを返す
- (float) textHeight:(NSString *)text {
    // 表示最大幅・高さ
    CGSize maxSize = CGSizeMake(230, CGFLOAT_MAX);
    // 表示するフォントサイズ
    NSDictionary *attr = @{NSFontAttributeName: [UIFont boldSystemFontOfSize:17.0]};

    // 以上踏まえた上で、表示に必要なサイズ
    CGSize modifiedSize = [text boundingRectWithSize:maxSize
                                             options:NSStringDrawingUsesLineFragmentOrigin
                                          attributes:attr
                                             context:nil
    ].size;

    return MAX(modifiedSize.height + 30, 49);
}

あとがき

iOS8からこの情報が意味なくなるそう。書いてから気づいたorz

iOS - ついにTableViewCellの高さが自動で調整してくれるようになった件!!! - Qiita

おすすめの書籍