iOS6 以上设置文本高度,行高(转)
-
在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