この問題を解決する方法の多くのリンクを見つけましたが、文字列の文字数が異なると動作が異なります。
したがって、私が使用した最初のアプローチは次のとおりです。
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
NSDictionary *comment = [self.comments objectAtIndex:indexPath.row];
NSString *text = comment[@"text"];
CGSize stringSize = [text sizeWithFont:[UIFont systemFontOfSize:14] constrainedToSize:CGSizeMake(320, MAXFLOAT) lineBreakMode:NSLineBreakByWordWrapping];
return stringSize.height;
}
私が使用した2番目のアプローチ:
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
NSDictionary *comment = [self.comments objectAtIndex:indexPath.row];
NSString *text = comment[@"text"];
UITextView *tempTV = [[UITextView alloc] init];
[tempTV setText:text];
CGFloat width = tableView.frame.size.width;
CGSize size = [tempTV sizeThatFits:CGSizeMake(width, MAXFLOAT)];
return size.height;
}
それは機能しますが、テキストが5行または6行を超える場合、最後の単語または最後の行が表示されないことがあります。また、テキストビューをコンテンツビューのすべての側面に合わせる自動レイアウトも使用しています。
iOS 6 もサポートしたいのですが、この解決策はうまくいかないようで、コードで計算の高さを維持する必要があると思います。
コードをデバッグすると、UITextView フレームがストーリーボードのサイズに等しいことに気付きました。そのため、幅は表示されている幅320 ptではなく600 ptです。メソッドでデバッグしました。しかし、この値をハードコーディングしても、高さの計算はどのような場合でも問題なく機能します。-cellForRowAtIndexPath