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