iOS開発:UITableViewCellの高さを計算する
UITableViewCellに大量の文字を表示しようとしている。Twitterクライアントのような感じで。いろいろと試しているうちに、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)」である。
※ ラベルの横幅の直接指定をなくそうと苦労したが、どこからも取得できなかった。