iOS開発:UITableViewCellの高さを計算する

UITableViewCellに大量の文字を表示しようとしている。Twitterクライアントのような感じで。いろいろと試しているうちに、2つのポイントがあることが分かった。

  1. セルの行数指定を無効にする。何行でも表示できるようにする
  2. セルの高さを計算する

参考:TableViewCellの高さを変更して複数行表示に対応する。|独学者の独り言

セルの行数指定を無効にする

普通にUITableViewCellを利用すると、最大行数しか文字が表示されない。そのため、最大行数を0行と指定する。Interface Builderで、ラベルのプロパティ「Lines」を”0″とする。0行だと文字数分の行数となる。

セルの高さを計算する

これが少し大変だった。1つ目の行数指定がなくなったので、セルの枠をはみ出て、文字が表示されるようになる。そのため、セルの高さは自前で計算して設定しないと行けない。

まずは、表示するラベルとセル全体の大きさを把握する。

真ん中のラベルの横幅が255で、高さが52。セル全体の高さは100となっている。

[c]

– (CGFloat)tableView:(UITableView*)tableView heightForRowAtIndexPath:(NSIndexPath*)indexPath {

UITableViewCell *cell = [self tableView:tableView cellForRowAtIndexPath:indexPath];

return [TweetCellViewController getCellHeight:tableView cell:cell];

}

[/c]

こちらは、tableviewのdelegateを指定したクラスに追記する。このメソッドで、セルの高さを指定する。

[c]

  • (CGFloat)getCellHeight:(UITableView *)tableView cell:(UITableViewCell *)cell {

CGSize bounds = CGSizeMake(255, tableView.frame.size.height);

CGSize size = [cell.textLabel.text sizeWithFont:cell.textLabel.font

constrainedToSize:bounds

lineBreakMode:UILineBreakModeCharacterWrap];

return size.height + 50.0;

}

[/c]

先ほどのメソッドから、呼び出されるメソッド。ラベルの横幅を指定している。最後に足している50は「セル全体の高さ−ラベルの高さ+パディング(2)」である。

※ ラベルの横幅の直接指定をなくそうと苦労したが、どこからも取得できなかった。

投稿日 2012年07月10日