我找到了很多链接如何解决这个问题,但如果字符串有不同的字母数量,它的工作方式会有所不同。
所以我使用的第一种方法是:
- (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;
}
我使用的第二种方法:
- (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,似乎this solution对我不起作用,我想我需要通过代码保持计算高度。
我注意到在调试代码时,我的UITextView框架等于故事板大小。所以宽度 600 pt 而不是显示宽度 320 pt 我已经在-cellForRowAtIndexPath
方法中调试了它。但即使我对这个值进行硬编码,高度计算也适用于任何情况下的问题。