iOS6 以上设置文本高度,行高(转)

2013-12-09     我来说两句    来源:冻僵的企鹅'zone  
收藏    我要投稿

在iOS 7之前,常用下面这个方法计算文本高度sizeWithFont:constrainedToSize:lineBreakMode:(Deprecated in iOS 7.0)

但是到了iOS 7 之后,这个方法就不建议使用了。提示用下面这个方法:

boundingRectWithSize:options:attributes:context:(Available in iOS 7.0 and later.)

可是这个方法是iOS 7 及其以后才能使用,我们现在的程序大部分都希望还能兼容iOS 6,甚至iOS 5。我们的程序只需要兼容iOS6,所以我希望有个方法能在iOS 6及其以上都能使用。

NSAttributedString就有一个类似的方法:

boundingRectWithSize:options:context:(Available in iOS 6.0 and later.)

使用这个方法需要先将NSString转为NSAttributedString:

 

-(NSMutableAttributedString *)attributedStringFromStingWithFont:(UIFont *)font
                                                withLineSpacing:(CGFloat)lineSpacing
{
    NSMutableAttributedString *attributedStr = [[NSMutableAttributedString alloc] initWithString:self attributes:@{NSFontAttributeName:font}];
    
    NSMutableParagraphStyle *paragraphStyle = [[NSMutableParagraphStyle alloc] init];
    [paragraphStyle setLineSpacing:lineSpacing];
    
    [attributedStr addAttribute:NSParagraphStyleAttributeName
                          value:paragraphStyle
                          range:NSMakeRange(0, [self length])];
    return attributedStr;
}

 

这里用到了类别,self就是调用方法的receiver。另外这里还可以设置文字的行间距。

然后就是计算文本的大小:

将这两个方法写在类别中,使用起来就很方便了:

 

@interface NSString(extended)
//计算文本的size
-(CGSize)boundingRectWithSize:(CGSize)size
                 withTextFont:(UIFont *)font
              withLineSpacing:(CGFloat)lineSpacing;
//sting转AttributedString
-(NSMutableAttributedString *)attributedStringFromStingWithFont:(UIFont *)font
                                                withLineSpacing:(CGFloat)lineSpacing;
@end
posted @ 2014-07-23 17:39  zhanglingzeng  阅读(234)  评论(0编辑  收藏  举报