在boundingRectWithSize中使用NSStringDrawingUsesLineFragmentOrigin:options:context:获得额外的空白

我正在使用boundingRectWithSize:options:context:在iOS 7中尝试计算UITableViewCell中文本的dynamic高度。 但是,使用这个方法和NSStringDrawingUsesLineFragmentOrigin作为选项,我总是会在底部和顶部获得一些额外的空间。 如果我切换到NSStringDrawingUsesDeviceMetrics字不会包装在行的末尾。 这是截图:

在这里输入图像说明

对于包含更多文本的行,空间会更大。 我该如何解决这个问题? 我使用下面的代码来获取包含文本的UILabel框架的大小:

 - (CGSize)sizeWithMaxSize:(CGSize)constrainedSize andFontSize:(CGFloat)fontSize { self.paragraphStyle = [[NSMutableParagraphStyle defaultParagraphStyle] mutableCopy]; self.paragraphStyle.lineBreakMode = NSLineBreakByWordWrapping; NSDictionary *dictionary = @{NSFontAttributeName: [UIFont systemFontOfSize:fontSize], NSParagraphStyleAttributeName: self.paragraphStyle.copy, NSForegroundColorAttributeName:[UIColor blackColor]}; NSAttributedString *attributedString = [[NSAttributedString alloc] initWithString:self attributes:dictionary]; CGRect frame = [attributedString boundingRectWithSize:constrainedSize options:NSStringDrawingUsesLineFragmentOrigin context:nil]; return frame.size; }; 

如果你两个选项,因为他们只是位字段… NSStringDrawingUsesLineFragmentOrigin|NSStringDrawingUsesDeviceMetrics

所以,而不是:

 CGRect frame = [attributedString boundingRectWithSize:constrainedSize options:NSStringDrawingUsesLineFragmentOrigin context:nil]; 

你有:

 CGRect frame = [attributedString boundingRectWithSize:constrainedSize options:NSStringDrawingUsesLineFragmentOrigin|NSStringDrawingUsesDeviceMetrics context:nil];