iOS7中NSString sizeWithFont:的替代方法

4

(sizeWithFont: forWidth: lineBreakMode:)方法在iOS 7.0中被弃用。

但是我该如何在iOS 7.0中执行与下面代码相同的操作呢?

CGSize fontSize =[self.text sizeWithFont:self.font forWidth:self.frame.size.width lineBreakMode:NSLineBreakByTruncatingTail];
< p > (boundingRectWithSize:options:attributes:context:) 这个方法可以做到这一点吗?我不确定,但这是我在苹果文档中搜索到的方法。 < /p > < p > 感谢您的帮助。 < /p >

如果您仍在支持iOS6并且没有利用任何新的渲染功能,那么继续使用已弃用的方法是可以的。如果您只支持iOS7,则boundingRectWithSize:options:attributes:context:是正确的方法。 - Brian Nickel
2个回答

15
我为NSString创建了一个类别,用于获取字符串的宽度或高度:

我为NSString创建了一个类别,用于获取字符串的宽度或高度:

- (CGFloat)widthWithFont:(UIFont *)font
{
    NSDictionary *attributes = [NSDictionary dictionaryWithObjectsAndKeys:font, NSFontAttributeName, nil];
    return [[[NSAttributedString alloc] initWithString:self attributes:attributes] size].width;
}

- (CGFloat)heigthWithWidth:(CGFloat)width andFont:(UIFont *)font
{
    NSMutableAttributedString *attrStr = [[NSMutableAttributedString alloc] initWithString:self];
    [attrStr addAttribute:NSFontAttributeName value:font range:NSMakeRange(0, [self length])];
    CGRect rect = [attrStr boundingRectWithSize:CGSizeMake(width, CGFLOAT_MAX) options:NSStringDrawingUsesLineFragmentOrigin | NSStringDrawingUsesFontLeading context:nil];
    return rect.size.height;
}

太好了,只是在heigthWithWidth中有一个小错误,如果你在boundingRectWithSize的宽度参数中删除固定宽度,效果会更好 :) CGRect rect = [attrStr boundingRectWithSize:CGSizeMake(width, CGFLOAT_MAX) options:NSStringDrawingUsesLineFragmentOrigin | NSStringDrawingUsesFontLeading context:nil]; - xarly

0
对于那些想要使用高度和宽度功能的人,但在Swift中是这样的:
func HeigthWithWidth(stringToSize : String, width : CGFloat, font : UIFont) -> CGFloat {
    var attrStr = NSMutableAttributedString(string: stringToSize);
    attrStr.addAttribute(NSFontAttributeName, value: font, range: NSRange.init(location: 0, length: stringToSize.characters.count));
    var rect = attrStr.boundingRectWithSize(CGSize(width: width, height: CGFloat.max), options: [NSStringDrawingOptions.UsesLineFragmentOrigin, NSStringDrawingOptions.UsesFontLeading], context: nil);
    return rect.size.height;
}

希望这能帮助那些后来者。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接