NSString sizeWithFont:iOS7中的备选方案

NSString sizeWithFont:iOS7中的备选方案,ios7,Ios7,iOS 7.0中不推荐使用方法(sizeWithFont:forWidth:lineBreakMode:) 但是,我如何在iOS 7.0中执行类似于以下代码的操作呢 CGSize fontSize =[self.text sizeWithFont:self.font forWidth:self.frame.size.width lineBreakMode:NSLineBreakByTruncatingTail]; (boundingRectWithSize:options:attributes

iOS 7.0中不推荐使用方法
(sizeWithFont:forWidth:lineBreakMode:)

但是,我如何在iOS 7.0中执行类似于以下代码的操作呢

CGSize fontSize =[self.text sizeWithFont:self.font forWidth:self.frame.size.width lineBreakMode:NSLineBreakByTruncatingTail];
(boundingRectWithSize:options:attributes:context:)是否可以执行此操作?我不确定,但这是我在苹果文档中搜索的方法


感谢您的帮助。

我有一个NSString类别,可以获取字符串的宽度或高度:

-(CGFloat)宽度带字体:(UIFont*)字体
{
NSDictionary*attributes=[NSDictionary Dictionary WithObjectsAndKeys:font,NSFontAttributeName,nil];
返回[[[NSAttributedString alloc]initWithString:self-attributes:attributes]size].width;
}
-(CGFloat)高宽:(CGFloat)宽和字体:(UIFont*)字体
{
NSMutableAttributedString*attrStr=[[NSMutableAttributedString alloc]initWithString:self];
[attrStr addAttribute:NSFontAttributeName值:字体范围:NSMakerRange(0,[自身长度])];
CGRect rect=[attrStr boundingRectWithSize:CGSizeMake(width,CGFLOAT_MAX)选项:NSStringDrawingUserLineFragmentOrigin | NSStringDrawingUserFontLeading上下文:nil];
返回rect.size.height;
}

对于那些需要高度和宽度功能但使用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;
}

希望这有助于以后的读者

如果您仍然支持iOS6,并且没有利用任何新的渲染功能,那么仍然可以使用不推荐使用的方法。如果您只支持iOS7,
boundingRectWithSize:options:attributes:context:
是正确的方法。这很好,只是heigthWithWidth中的一个小错误,最好删除boundingrectWidth参数中的固定宽度:)cRect rect=[attrStr boundingrectWidth:CGSizeMake(width,CGFLOAT\u MAX)选项:NSStringDrawingUserLineFragmentOrigin | NSStringDrawingUserFontLeading上下文:nil];