废话不多说,上图上代码,举例说明!
// 显示文案
NSString *content = @"非常优秀,性格随和开朗大方,待人友好,为人诚实谦虚,beautiful,工作勤奋,认真负责,能吃苦耐劳,尽职尽责,有耐心";
// 计算文案高度
CGRect rect = [content boundingRectWithSize:CGSizeMake(SCREEN_WIDTH-40, MAXFLOAT) options:NSStringDrawingUsesLineFragmentOrigin | NSStringDrawingUsesFontLeading attributes:@{NSFontAttributeName:[UIFont systemFontOfSize:14]} context:nil];
CGFloat height = rect.size.height;
// 创建UILabel
UILabel *titleLabel = [[UILabel alloc] initWithFrame:CGRectMake(20, 17, SCREEN_WIDTH-40, height)];
titleLabel.text = content;
titleLabel.font = [UIFont systemFontOfSize:14];
titleLabel.numberOfLines = 0;
titleLabel.backgroundColor = [UIColor redColor];
[view addSubview:titleLabel];
运行情况视图如下:
字符默认自动换行,不明白“虚,”为什么换行了。
可能有时候不想要字符自动换行的,那需要设置lineBreakMode
typedef NS_ENUM(NSInteger, NSLineBreakMode) {
NSLineBreakByWordWrapping = 0, // Wrap at word boundaries, default
NSLineBreakByCharWrapping, // Wrap at character boundaries
NSLineBreakByClipping, // Simply clip
NSLineBreakByTruncatingHead, // Truncate at head of line: "...wxyz"
NSLineBreakByTruncatingTail, // Truncate at tail of line: "abcd..."
NSLineBreakByTruncatingMiddle // Truncate middle of line: "ab...yz"
} API_AVAILABLE(macos(10.0), ios(6.0), watchos(2.0), tvos(9.0));
titleLabel.lineBreakMode = NSLineBreakByCharWrapping;
设置lineBreakMode,以字符为单位,进行换行
此时UILabel所计算的高度,还是按默认的所计算的, 于是计算高度也需要进行设置lineBreakMode
NSMutableParagraphStyle *style = [[NSMutableParagraphStyle alloc] init];
[style setLineBreakMode:NSLineBreakByCharWrapping];
CGRect rect = [content boundingRectWithSize:CGSizeMake(SCREEN_WIDTH-40, MAXFLOAT) options:NSStringDrawingUsesLineFragmentOrigin | NSStringDrawingUsesFontLeading attributes:@{NSFontAttributeName:[UIFont systemFontOfSize:14], NSParagraphStyleAttributeName:style} context:nil];
CGFloat height = rect.size.height;
perfect