sizeWithFont:在iOS 7中

时间:2013-09-27 07:30:37

标签: ios objective-c ios7

我收到警告:“'sizeWithFont:constrainedToSize:lineBreakMode:'已弃用:首先在iOS 7.0中弃用” 有人可以建议我替代这种方法吗?

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
// Calculate height based on cell content — cell content will stretch appropriately when the height is set
Post *post = self.articleComments[indexPath.row];
CGFloat width = tableView.frame.size.width - 71 - 15;  // Width of comment text area
UIFont *commentFont = [UIFont fontWithName:@"SeroCompPro-Light" size:14];
CGFloat commentTextHeight = [post.text sizeWithFont:commentFont constrainedToSize:CGSizeMake(width, 10000) lineBreakMode:NSLineBreakByWordWrapping].height;

return commentTextHeight + 31 + 37;
}  

4 个答案:

答案 0 :(得分:3)

替代方案是:

- (NSSize)sizeWithAttributes:(NSDictionary *)attributes

在你的情况下:

[string sizeWithAttributes:@{NSFontAttributeName:[UIFont fontwithName:@"SeroCompPro-Light" size:14]}];

答案 1 :(得分:1)

ios 7中不推荐使用此功能。 而不是这个功能

sizeWithFont:constrainedToSize:lineBreakMode

使用此功能,使用

- (CGRect)boundingRectWithSize:(CGSize)size options:(NSStringDrawingOptions)options attributes:(NSDictionary *)attributes context:(NSStringDrawingContext *)context

 boundingRectWithSize:options:attributes:context:

计算并返回当前图形上下文中指定矩形内使用给定选项和显示特征绘制的接收器的边界矩形。

参数 尺寸 要绘制的矩形的大小。

选项 字符串绘图选项。

属性 要应用于字符串的文本属性的字典。这些属性可以应用于NSAttributedString对象,但在NSString个对象的情况下,属性适用于整个字符串,而不是字符串中的范围。 上下文

用于接收器的字符串绘图上下文,指定最小比例因子和跟踪调整。

答案 2 :(得分:0)

我使用了以下代码,它可以工作:

NSAttributedString *attributedText = [[NSAttributedString alloc] initWithString:text attributes:@
     {
     NSFontAttributeName: font
     }];

    CGRect rect = [attributedText boundingRectWithSize:(CGSize){size.width, CGFLOAT_MAX}
                                               options:NSStringDrawingUsesLineFragmentOrigin
                                               context:nil];

    result = CGSizeMake(ceilf(rect.size.width), ceilf(rect.size.height));

使用ceilf方法创建NSAttributedString并获得正确的宽度高度时出现问题

答案 3 :(得分:0)

支持IOS7及更低版本的替代解决方案 -

CGSize expectedLabelSize;
if ([self respondsToSelector:@selector(sizeWithAttributes:)])
{
    expectedLabelSize = [subTitle sizeWithAttributes:@{NSFontAttributeName:subTitleLabel.font}];
}else{
    expectedLabelSize = [subTitle sizeWithFont:subTitleLabel.font constrainedToSize:subTitleLabel.frame.size lineBreakMode:NSLineBreakByWordWrapping];
}