0

我收到一条警告:“'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

4 回答 4

3

替代方案是:

- (NSSize)sizeWithAttributes:(NSDictionary *)attributes

在你的情况下:

[string sizeWithAttributes:@{NSFontAttributeName:[UIFont fontwithName:@"SeroCompPro-Light" size:14]}];
于 2013-09-27T07:48:47.490 回答
1

此功能在 ios 7 中已弃用。代替此功能

sizeWithFont:constrainedToSize:lineBreakMode

使用此功能,使用

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

 boundingRectWithSize:options:attributes:context:

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

参数 size 要绘制的矩形的大小。

options 字符串绘图选项。

attributes 要应用于字符串的文本属性字典。这些是可以应用于NSAttributedString对象的相同属性,但在NSString对象的情况下,属性应用于整个字符串,而不是字符串内的范围。语境

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

于 2013-09-27T08:11:16.387 回答
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];
}
于 2013-12-01T11:09:16.480 回答
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 并获得正确的宽度高度时出现问题

于 2013-10-09T23:31:22.940 回答