概述
本文介绍Label的一些常规用法。由于满足UI需求时会存在很多细节的问题,所以需要对Label能做到一个比较灵活的使用。首先感谢博主KC写的精彩博文。
本文主要内容如下:
1.Labe的一些基本方法和属性
2.Label控件如何自动适应控件中text的大小
3.设计Label中其他的相关类
Labe的一些基本方法和属性
至于基本方法和属性,看如下示例:
UILabel *label = [[UILabel alloc]init];
label.backgroundColor = [UIColor redColor];
label.text = @"HUSHUNFENG";
label.font = [UIFont systemFontOfSize:12.0f];
label.textColor = [UIColor yellowColor];
主要还是对font的使用要熟练,还有color通常不会是简单的调用这种方法进行设置。
Label控件如何自动适应控件中text的大小
实际工程设计中,通常需要根据text的大小来同步Label控件大小,使Label控件能够刚好完全“包住”Text,又不浪费多余的空间,这样也有利于View的布局。
有两个方法可以提供这种功能:
- 对于单行文本数据的显示调用- (CGSize)sizeWithAttributes:(NSDictionary *)attrs;方法来得到文本宽度和高度。无非是让你拿到label而已,具体label的frame还是可以根据实际情况来设定。
- 对于多行文本数据的显示调用- (CGRect)boundingRectWithSize:(CGSize)size options:(NSStringDrawingOptions)options attributes:(NSDictionary *)attributes context:(NSStringDrawingContext *)context ;方法来得到文本宽度和高度;同时注意在此之前需要设置文本控件的numberOfLines属性为0。
下面先举个单行的例子:
UILabel *label = [[UILabel alloc]init]; label.backgroundColor = [UIColor blackColor]; label.text = @"HUSHUNFENG"; label.font = [UIFont systemFontOfSize:12.0f]; label.textColor = [UIColor greenColor]; CGSize userNameSize=[label.text sizeWithAttributes:@{NSFontAttributeName: [UIFont systemFontOfSize:11]}]; label.frame = CGRectMake(80, 100, userNameSize.width, userNameSize.height);
注意最后这两句代码。我们通过text得到字体的宽度和高度,然后再去设置Label的frame。
下面的例子是多行的: 关于 boundingRectWithSize:CGSizeMake(200, 0)中的(200,0)的个人理解:一行中的最大宽度和高度。在多行处理的代码中,最大高度无限。
重要体会:!!!CGSize userNameSize=[label.text boundingRectWithSize:CGSizeMake(200, 0) options: NSStringDrawingUsesLineFragmentOrigin attributes:@{NSFontAttributeName:[UIFont fontWithName:nil size:15.0f]} context:nil].size; 这个代码无非也是计算出text的实际长和高。只不过可以设定最大长是多少,那么高就会相应地变化。然后label还是可以根据实际来设定。(200,0)中200意味着长最多是200,但高可以无限,也可以设置一个具体值比较妥。
UILabel *label = [[UILabel alloc]init]; label.backgroundColor = [UIColor blackColor]; label.text = @"苹果专门为开发者提供了一款集成开发环境,它集工程管理、代码编写、代码编译、代码调用、代码版本管理与一体的编译器。"; label.numberOfLines = 0; label.font = [UIFont systemFontOfSize:12.0f]; label.textColor = [UIColor greenColor]; CGSize userNameSize=[label.text boundingRectWithSize:CGSizeMake(200, 0) options: NSStringDrawingUsesLineFragmentOrigin attributes:@{NSFontAttributeName:[UIFont fontWithName:nil size:15.0f]} context:nil].size; label.frame = CGRectMake(80, 100, userNameSize.width, userNameSize.height);
设计Label中其他的相关类
1.UIFont
2.NSStringDrawing