UILabel根据文本、字体大小计算label宽度;以及自适应高度
下载地址 GitHub源码 或者 Demo下载
想获得所有字体,如下:
//获取到所有的字体名称 NSArray *familyNames = [UIFont familyNames]; NSLog(@"所有字体名称--%@",familyNames);
一、单行文本
对于单行文本来说,直接使用sizeWithAttributes方法,如下:
- (void)viewDidLoad { [super viewDidLoad]; //获取到所有的字体名称 NSArray *familyNames = [UIFont familyNames]; NSLog(@"所有字体名称--%@",familyNames); UILabel *lbl_text = [[UILabel alloc]init]; lbl_text.backgroundColor = [UIColor greenColor]; lbl_text.text = @"我们是一家人"; // 设置Label的字体 HelveticaNeue Courier UIFont *fnt = [UIFont fontWithName:@"Courier New" size:24.0f]; lbl_text.font = fnt; // 根据字体得到NSString的尺寸 CGSize size = [lbl_text.text sizeWithAttributes:[NSDictionary dictionaryWithObjectsAndKeys:fnt,NSFontAttributeName,nil]]; // 名字的H CGFloat nameH = size.height; // 名字的W CGFloat nameW = size.width; lbl_text.frame = CGRectMake(100,100, nameW,nameH); [self.view addSubview:lbl_text]; }
如图:
二、多行文本
首先UILabel的numberOfLines设置为0,其次通过- (CGRect)boundingRectWithSize:(CGSize)size options:(NSStringDrawingOptions)options attributes:(NSDictionary *)attributes context:(NSStringDrawingContext *)context方法来计算CGSize,具体代码如下:
- (void)viewDidLoad { [super viewDidLoad]; //获取到所有的字体名称 NSArray *familyNames = [UIFont familyNames]; NSLog(@"所有字体名称--%@",familyNames); [self setMultiLine]; } - (void)setMultiLine { UILabel *lbl_text = [UILabel new]; lbl_text.font = [UIFont systemFontOfSize:14]; lbl_text.text = @"文字在语言学中指书面语的视觉形式,古代把独体字叫做“文”,把合体字叫做“字”,如今联合起来叫做“文字”,文字的基本个体叫做“字”。在日常生活中,“文字”还可以指书面语、语言、文章、字等。视觉符号形式,突破口语的时间和空间限制。例如汉字、拉丁字母。"; lbl_text.backgroundColor = [UIColor greenColor]; lbl_text.numberOfLines = 0;//多行显示,计算高度 lbl_text.textColor = [UIColor lightGrayColor]; CGSize lblSize = [lbl_text.text boundingRectWithSize:CGSizeMake([UIScreen mainScreen].bounds.size.width - 20, MAXFLOAT) options:NSStringDrawingUsesLineFragmentOrigin attributes:@{NSFontAttributeName:[UIFont systemFontOfSize:14]} context:nil].size; lbl_text.frame = CGRectMake(10, 100, lblSize.width, lblSize.height); [self.view addSubview:lbl_text]; }
如图:
声明:该文观点仅代表作者本人,入门客AI创业平台信息发布平台仅提供信息存储空间服务,如有疑问请联系rumenke@qq.com。
- 上一篇: iOS开发算法--堆排序
- 下一篇: Java--变量相加和常量相加(类型转换)