こんにちは。
今回は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のソース