UILabel是iOS开发一个基本控件。主要用来显示文本信息。
一、UILabel未作自适应
代码:
self.noAdapLbl = [[UILabel alloc] init];
_noAdapLbl.frame = CGRectMake(20, 36, 280, 200);// 为UILabel设置高度
_noAdapLbl.backgroundColor = [UIColor orangeColor];// UILabel加上背景颜色,方便调试观看
_noAdapLbl.font = [UIFont systemFontOfSize:15];
_noAdapLbl.text = @" 明月几时有,把酒问青天。不知天上宫阙,今夕是何年?我欲乘风归去,又恐琼楼玉宇,高处不胜寒。起舞弄清影,何似在人间!转朱阁,低绮户,照无眠。不应有恨,何事长向别时圆?人有悲欢离合,月有阴晴圆缺,此事古难全。但愿人长久,千里共婵娟 。";
_noAdapLbl.numberOfLines = 0;// 文本行数,为0时没有最大行数限制
[self.view addSubview:_noAdapLbl];
显示效果:
分析:这里设置了UILabel的numberOfLines属性,所以文本可以显示多行。但从显示效果看UILabel设置的高度比实际文本信息高。So,请看下一条。
二、UILabel高度自适应
代码:
self.adapLbl = [[UILabel alloc] init];
_adapLbl.backgroundColor = [UIColor yellowColor];// UILabel加上背景颜色,方便调试观看
_adapLbl.font = [UIFont systemFontOfSize:15];
_adapLbl.text = @" 明月几时有,把酒问青天。不知天上宫阙,今夕是何年?我欲乘风归去,又恐琼楼玉宇,高处不胜寒。起舞弄清影,何似在人间!转朱阁,低绮户,照无眠。不应有恨,何事长向别时圆?人有悲欢离合,月有阴晴圆缺,此事古难全。但愿人长久,千里共婵娟 。";
_adapLbl.numberOfLines = 0;// 文本行数,为0时没有最大行数限制
// 自适应高度
CGFloat height = [_adapLbl sizeThatFits:CGSizeMake(280, MAXFLOAT)].height;
_adapLbl.frame = CGRectMake(20, 36, 280, height);// 为UILabel设置高度
[self.view addSubview:_adapLbl];
显示效果:
分析:主要用了- (CGSize)sizeThatFits:(CGSize)size;方法
三、UILabel加上行间距
代码:
self.spacpLbl = [[UILabel alloc] init];
_spacpLbl.backgroundColor = [UIColor yellowColor];// UILabel加上背景颜色,方便调试观看
_spacpLbl.font = [UIFont systemFontOfSize:15];
_spacpLbl.text = @" 明月几时有,把酒问青天。不知天上宫阙,今夕是何年?我欲乘风归去,又恐琼楼玉宇,高处不胜寒。起舞弄清影,何似在人间!转朱阁,低绮户,照无眠。不应有恨,何事长向别时圆?人有悲欢离合,月有阴晴圆缺,此事古难全。但愿人长久,千里共婵娟 。";
_spacpLbl.numberOfLines = 0;// 文本行数,为0时没有最大行数限制
// 行间距
NSMutableAttributedString *attributedString = [[NSMutableAttributedString alloc] initWithString:_spacpLbl.text];
NSMutableParagraphStyle *paragraphStyle = [[NSMutableParagraphStyle alloc] init];
paragraphStyle.lineSpacing = 20;// 行间距为20
[attributedString addAttribute:NSParagraphStyleAttributeName value:paragraphStyle range:NSMakeRange(0, _spacpLbl.text.length)];
_spacpLbl.attributedText = attributedString;
// 自适应高度
CGFloat height = [_spacpLbl sizeThatFits:CGSizeMake(280, MAXFLOAT)].height;
_spacpLbl.frame = CGRectMake(20, 36, 280, height);// 为UILabel设置高度
[self.view addSubview:_spacpLbl];
显示效果:
分析:看代码吧
四、UILabel下划线
代码:
self.underLineLbl = [[UILabel alloc] init];
_underLineLbl.frame = CGRectMake(20, 36, 280, 30);
_underLineLbl.backgroundColor = [UIColor cyanColor];// UILabel加上背景颜色,方便调试观看
_underLineLbl.text = @"爱上生活";
// 下划线
NSMutableAttributedString *attributedString = [[NSMutableAttributedString alloc] initWithString:_underLineLbl.text];
[attributedString addAttribute:NSUnderlineStyleAttributeName value:[NSNumber numberWithInteger:NSUnderlineStyleSingle] range:NSMakeRange(0, _underLineLbl.text.length)];
_underLineLbl.attributedText = attributedString;
[self.view addSubview:_underLineLbl];
显示效果:
分析:主要用到NSMutableAttributedString这个类
五、UILabel宽度自适应
代码:
self.widthLbl = [[UILabel alloc] init];
_widthLbl.backgroundColor = [UIColor lightGrayColor];// UILabel加上背景颜色,方便调试观看
_widthLbl.text = @"爱上生活";
// 自适应宽度
CGFloat width = [_widthLbl sizeThatFits:CGSizeMake(MAXFLOAT, 30)].width;
_widthLbl.frame = CGRectMake(20, 36, width, 30);// 为UILabel设置高度
[self.view addSubview:_widthLbl];
显示效果:
分析:同UILabel的宽度自适应
六、UILabel添加点击事件
代码:
lbl.userInteractionEnabled=YES;
UITapGestureRecognizer *labelTapGestureRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(labelTouchUpInside:)];
[lbl addGestureRecognizer:labelTapGestureRecognizer];
-(void)labelTouchUpInside:(UITapGestureRecognizer *)recognizer{
UILabel *label=(UILabel*)recognizer.view;
NSLog(@"%@被点击了",label.text);
}
七、同一UILabel 字体不同颜色
首先继承一个label,要想在一个label中实现各种不同颜色的字,就是重绘。
代码:
//设置颜色属性和字体属性
- (NSAttributedString *)illuminatedString:(NSString*)text
//
//
//
}
//重绘Text
- (void)drawRect:(CGRect)rect
{
CGContextRef context = UIGraphicsGetCurrentCont
CGContextSaveGState(context);
CGContextTranslateCTM(context, 0.0, 0.0);
// CGContextScaleCTM(context, 1, 100);
NSArray *fontArray = [UIFont familyNames];
NSString *fontName;
if ([fontArray count]) {
fontName = [fontArray objectAtIndex:0];
}
CTLineRef line =CTLineCreateWithAttribut
CGContextSetTextPosition
CTLineDraw(line, context);
CGContextRestoreGState(context);
CFRelease(line);
//CGContextRef myContext = UIGraphicsGetCurrentCont
//CGContextSaveGState(myContext);
//[self MyColoredPatternPainting
//CGContextRestoreGState(myContext);
}
总结:看似简单永远蕴含很多。UILabel控件值得我们掌握。