因项目需要,所以研究了下,根据之前的OC代码是没有办法原样转换的,因为Swift中已经没有boundingRectWithSize
这个方法了。所以需要使用其他的方法,也能达到一样的效果。
先来一个OC文件代码
.h文件
+ (CGSize)sizeWithText:(NSString *)text font:(UIFont *)font;
+ (CGSize)sizeWithText:(NSString *)text font:(UIFont *)font maxWidth:(CGFloat)maxWidth;
.m文件
+ (CGSize)sizeWithText:(NSString *)text font:(UIFont *)font {
return [self sizeWithText:text font:font maxWidth:MAXFLOAT];
}
+ (CGSize)sizeWithText:(NSString *)text font:(UIFont *)font maxWidth:(CGFloat)maxWidth {
NSMutableDictionary *dict = [NSMutableDictionary dictionary];
dict[NSFontAttributeName] = font;
CGSize size = CGSizeMake(maxWidth, MAXFLOAT);
return [text boundingRectWithSize:size options:NSStringDrawingTruncatesLastVisibleLine | NSStringDrawingUsesLineFragmentOrigin | NSStringDrawingUsesFontLeading attributes:dict context:nil].size;
}
本文重点:Swift代码,其实也就几行而已
Swift代码
/**
* 计算字符串长度
*/
static func sizeWithText(text: NSString, font: UIFont, size: CGSize) -> CGRect {
let attributes = [NSFontAttributeName: font]
let option = NSStringDrawingOptions.usesLineFragmentOrigin
let rect:CGRect = text.boundingRect(with: size, options: option, attributes: attributes, context: nil)
return rect;
}