UI基础 - UILabel | 自适应高度

■ 简言

1. UILabel 是显示文本信息的 UI 控件,它在 App 中是出现频率最高的控件

■ 使用方式

1. 常用 API

 1     UILabel *labelA = [[UILabel alloc] initWithFrame:CGRectMake(self.view.center.x-220/2.0,200, 220, 100)];
 2     labelA.backgroundColor = [UIColor purpleColor]; // 背景颜色
 3     [self.view addSubview:labelA];
 4     // 超过父视图的部分剪除
 5     // 方式一
 6     labelA.clipsToBounds = YES;
 7     // 方式二
 8     labelA.layer.masksToBounds = YES;// clipsToBounds 执行时会调用自己图层的 maskToBounds 方法
 9     labelA.layer.cornerRadius = 4;   // 圆角
10     labelA.text = @"what the ****";  // 文本
11     labelA.textColor = [UIColor redColor]; // 文本颜色
12     labelA.textAlignment = NSTextAlignmentCenter; // 文字位置
13     labelA.font = [UIFont systemFontOfSize:12.0]; // 字体大小
14     labelA.font = [UIFont boldSystemFontOfSize:23.0]; // 字体大小且加粗
15     labelA.lineBreakMode = NSLineBreakByWordWrapping; // 断行模式
16     labelA.numberOfLines = 0; // 0:不限制行数,前提是 label 高度足够
17     labelA.shadowOffset = CGSizeMake(-10, -10); // 偏移量
18     labelA.shadowColor = [UIColor yellowColor]; // 字体阴影颜色:需偏移量才出效果
19     
20     // 自定义文字类型
21     labelA.font = [UIFont fontWithName:@"Arial-BoldItalicMT" size:18.0];
22     // 获取字体所有族名
23     NSArray *familyNames = [UIFont familyNames];
24     for (NSString *familyName in familyNames) {
25         NSLog(@"family name = %@",familyName);
26         NSArray *fonts = [UIFont fontNamesForFamilyName:familyName];
27         NSLog(@"%@",fonts);
28     }

2. 自适应高度

方式一:使用 @{NSFontAttributeName : [UIFont systemFontOfSize:12.0]}

 1     NSDictionary *textDic = [NSDictionary dictionaryWithObjectsAndKeys:[UIFont systemFontOfSize:12.0],NSFontAttributeName, nil];
 2     NSString *string = @"那是我日夜思念深深爱着的人哪,到底我该如何表达,她会接受我吗,也许永远都不会跟她说出那句话,注定我要浪迹天涯,怎么能有牵挂,梦想总是遥不可及,是不是应该放弃,花开花落又是一季,春天啊你在哪里,青春如同奔流的江河,一去不回来不及道别,只剩下麻木的我没有了当年的热血。";
 3     
 4     // height 置 0:表示不限制渲染高度,意味着什么时候渲染完什么时候结束
 5     // 计算时候限定的宽度要和 label 显示时的宽度保持一致
 6     CGRect rect =  [string boundingRectWithSize:CGSizeMake(300, 0) options:NSStringDrawingUsesLineFragmentOrigin attributes:textDic context:nil];
 7     UILabel *labelN = [[UILabel alloc] initWithFrame:CGRectMake(self.view.center.x-150, 100, 300, rect.size.height)];
 8     labelN.backgroundColor = [UIColor whiteColor];
 9     labelN.text = string;
10     // 指定字号时要同 textDic 中的字号设置相匹配
11     // 否则因系统默认字号 17.0f,自适应计算出错
12     labelN.font = [UIFont systemFontOfSize:11.0];// 字号不匹配
13     labelN.numberOfLines = 0;
14     [self.view addSubview:labelN];

方式二:配合 NSMutableParagraphStyle

 1     UILabel *labelH = [[UILabel alloc] init];
 2     labelH.text = @"那是我日夜思念深深爱着的人哪,到底我该如何表达,她会接受我吗,也许永远都不会跟她说出那句话,注定我要浪迹天涯,怎么能有牵挂,梦想总是遥不可及,是不是应该放弃,花开花落又是一季,春天啊你在哪里,青春如同奔流的江河,一去不回来不及道别,只剩下麻木的我没有了当年的热血。";
 3     [labelH setNumberOfLines:0];
 4     labelH.backgroundColor = [UIColor whiteColor];
 5     labelH.font = [UIFont systemFontOfSize:12.0];
 6 
 7     // NSMutableParagraphStyle
 8     NSMutableParagraphStyle *paragraphstyle = [[NSMutableParagraphStyle alloc] init];
 9     paragraphstyle.lineBreakMode = NSLineBreakByCharWrapping;
10     // 指定字体和段落风格
11     NSDictionary *dic = @{NSFontAttributeName:labelH.font,NSParagraphStyleAttributeName:paragraphstyle.copy};
12     // 匹配尺寸
13     CGRect rect = [labelH.text boundingRectWithSize:CGSizeMake(self.view.frame.size.width, self.view.frame.size.height) options:NSStringDrawingUsesLineFragmentOrigin attributes:dic context:nil];
14     labelH.frame = CGRectMake(5, 120, rect.size.width, rect.size.height);
15     [self.view addSubview:labelH];

运行效果:方式一 | 方式二

     |     

 

posted on 2018-04-04 13:04  低头捡石頭  阅读(25)  评论(0编辑  收藏  举报

导航