こんにちは。
今回はUITableViewにおいてcellの高さをcellの内容に合わせて変化させるということをやってみます。
Natsuliphoneのソースを参考にさせていただきました。
UITableViewでcellの高さを設定するには、UITableViewDelegateのtableView:heightForRowAtIndexPath:メソッドを実装して高さを返してあげます。
ただ、ここに問題があってこのメソッドが呼び出される時点ではcellができていないのです。
ですので、cellForRowAtIndexPath:メソッドなどでcellを取得してそのcellの高さを返すというような方法をとることができません。
そこで対象となるcellに高さを計算するためのクラスメソッドを実装し、そこで得られた値をtableView:heightForRowAtIndexPath:に返します。
+ (CGFloat)heightWithContents:(NSString *)contents
{
CGFloat result;
CGSize labelSize;
result = 0.0;
labelSize = [contents sizeWithFont:[UIFont systemFontOfSize:16.0]
constrainedToSize:CGSizeMake(300.0, 10000)
lineBreakMode:UILineBreakModeWordWrap];
result += labelSize.height;
return result;
}
複数行にわたるtextの高さを求めるにはsizeWithFont:constrainedToSize:lineBreakMode:メソッドを使用します。
sizeWithFont:forWidth:lineBreakMode:メソッドは1行だけのサイズを返しますので、名前にだまされないようにしてください。
参考: Natsuliphoneのソース