在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
真正的爱,应该超越生命的长度心灵的宽度灵魂的深度