冻僵的企鹅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 *)fontwithLineSpacing:(CGFloat)lineSpacing{NSMutableAttributedString *attributedStr = [[NSMutableAttributedString alloc] initWithString:self attributes:@{NSFontAttributeName:font}];NSMutableParagraphStyle *paragraphStyle = [[NSMutableParagraphStyle alloc] init];[paragraphStyle setLineSpacing:lineSpacing];[attributedStr addAttribute:NSParagraphStyleAttributeNamevalue:paragraphStylerange:NSMakeRange(0, [self length])];return attributedStr;}-(CGSize)boundingRectWithSize:(CGSize)sizewithTextFont:(UIFont *)fontwithLineSpacing:(CGFloat)lineSpacing{NSMutableAttributedString *attributedText = [self attributedStringFromStingWithFont:fontwithLineSpacing:lineSpacing];CGSize textSize = [attributedText boundingRectWithSize:sizeoptions:NSStringDrawingUsesLineFragmentOrigincontext:nil].size;return textSize;}

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

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

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

@interface NSString(extended)//计算文本的size-(CGSize)boundingRectWithSize:(CGSize)sizewithTextFont:(UIFont *)fontwithLineSpacing:(CGFloat)lineSpacing;//sting转AttributedString-(NSMutableAttributedString *)attributedStringFromStingWithFont:(UIFont *)fontwithLineSpacing:(CGFloat)lineSpacing;@end

真正的爱,应该超越生命的长度心灵的宽度灵魂的深度

冻僵的企鹅zone

相关文章:

你感兴趣的文章:

标签云: