1

この問題を解決する方法の多くのリンクを見つけましたが、文字列の文字数が異なると動作が異なります。

したがって、私が使用した最初のアプローチは次のとおりです。

- (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

4

0 に答える 0