NSAttributedString *attrStr = ... // your attributed string
CGFloat width = 300; // whatever your desired width is
CGRect rect = [attrStr boundingRectWithSize:CGSizeMake(width, 10000) options:NSStringDrawingUsesLineFragmentOrigin | NSStringDrawingUsesFontLeading context:nil];

解决方案 »

  1.   

    ios7 以后 sizeWithFont 方法被废弃了。现在取uilabel的高度使用NSString的类方法boundingRectWithSize。 伪代码见楼上。
      

  2.   

    请问如果使用废弃的sizeWithFont ,会有什么后果?会影响app的审核通过吗?
      

  3.   

    应该不会,但建议使用最新的方法来处理
    方法一:
    UIFont * font = [UIFont fontWithName:@"Helvetica" size:20.0];
        CGSize size = CGSizeMake(320,1000);
        
        CGSize lablesize = [showtext.string sizeWithFont:font constrainedToSize:size lineBreakMode:NSLineBreakByWordWrapping];
      
    方法2:
    CGSize lablesize = [showtext  boundingRectWithSize:CGSizeMake(300,10000) options:NSStringDrawingUsesLineFragmentOrigin|NSStringDrawingUsesFontLeading context:nil].size;我发现用方法1,正好能够显示出label中的内容showtext ,但是方法2却不行,只能显示大约一半,这是为什么呢?
      

  4.   

    应该不会,但建议使用最新的方法来处理
    方法一:
    UIFont * font = [UIFont fontWithName:@"Helvetica" size:20.0];
        CGSize size = CGSizeMake(320,1000);
        
        CGSize lablesize = [showtext.string sizeWithFont:font constrainedToSize:size lineBreakMode:NSLineBreakByWordWrapping];
      
    方法2:
    CGSize lablesize = [showtext  boundingRectWithSize:CGSizeMake(300,10000) options:NSStringDrawingUsesLineFragmentOrigin|NSStringDrawingUsesFontLeading context:nil].size;我发现用方法1,正好能够显示出label中的内容showtext ,但是方法2却不行,只能显示大约一半,这是为什么呢?
    方法2 没有附加上其它的属性,如字体大小等设置。尝试如下代码
    NSDictionary *attributes = @{NSFontAttributeName:font};
    CGSize lablesize = [showtext  boundingRectWithSize:CGSizeMake(300,10000) options:NSStringDrawingUsesLineFragmentOrigin|NSStringDrawingUsesFontLeading 
    attributes:attributes
    context:nil].size;