Objective-C:文本标签(UILabel)

常用属性和方法有:

1、创建

CGRect rect = CGRectMake(100,200,50,50);

UILabel *label = [[UILabel alloc] initWithFrame:rect]; //创建alloc

label.tag =101; //设置label的标记(tag)

label.userInteractionEnabled = YES;//是否能与用户交互

2、text//设置和读取文本内容,默认为nil

label.text = @”文本信息”;//设置内容

NSLog(@”%@”, label.text);//读取内容

3、textColor//设置文字颜色,默认为黑色

lable.textColor = [UIColor redColor];

4、font//设置字体大小,默认17

label.font = [UIFont systemFontOfSize:20];//⼀一般方法

label.font = [UIFont boldSystemFontOfSize:20];//加粗方法

label.font = [UIFont fontWithName:@”Arial”size:16];//指定字体的方法//还有⼀一种从外部导入字体的方法。

5、textAlignment//设置标签文本对齐方式。

label.textAlignment = NSTextAlignmentCenter;

textAlignment有三种设置方式:

NSTextAlignmentLeft为向左对齐

NSTextAlignmentCenter为居中对齐

NSTextAlignmentRight为向右对齐

注:UITextAlignmentCenter/UITextAlignmentLeft/UITextAlignmentRight,那是iOS6以前的用法,iOS6的最新用法已改

6、numberOfLines//标签最多显示行数,如果为0则表示多行,没有最大行数限制。

label.numberOfLines =2;

7、enabled//只是决定了Label的绘制方式,将它设置为NO将会使文本变暗,表示它没有激活,这时向它设置颜色值是无效的。

label.enable = NO;

8、highlighted//是否高亮显示

label.highlighted = YES;

label.highlightedTextColor = [UIColor orangeColor];//高亮显示时的文本颜色

9、ShadowColor//设置阴影颜色

[label setShadowColor:[UIColor blackColor]];

10、ShadowOffset//设置阴影偏移量

[label setShadowOffset:CGSizeMake(-1,-1)];

11、baselineAdjustment//如果adjustsFontSizeToFitWidth属性设置为YES,这个属性就来控制文本基线的行为。

label.baselineAdjustment = UIBaselineAdjustmentNone;

baselineAdjustment可设置:

UIBaselineAdjustmentAlignBaselines =0,默认,文本最上端与中线对齐。

UIBaselineAdjustmentAlignCenters, 文本中线与label中线对齐。

UIBaselineAdjustmentNone, 文本最低端与label中线对齐。

12、Autoshrink  //是否自动收缩Fixed Font Size 默认,如果Label宽度小于文字长度时时,文字大小不自动缩放minimumScaleFactor 设置最小收缩比例,如果Label宽度小于文字长度时,文字进行收缩,收缩超过比例后,停止收缩。

minimumFontSize 设置最小收缩字号,如果Label宽度小于文字长度时,文字字号减小,低于设定字号后,不再减小。

//6.0以后不再使用了。

label.minimumScaleFactor =0.5;

label1.minimumFontSize = 10.0;//最小字体,行数为1时有效,默认为0.0

13、adjustsLetterSpacingToFitWidth//改变字母之间的间距来适应Label大小

myLabel.adjustsLetterSpacingToFitWidth = NO;

14、 lineBreakMode//设置文字过长时的显示格式

label.lineBreakMode = NSLineBreakByCharWrapping;以字符为显示单位显示,后面部分省略不显示。

label.lineBreakMode = NSLineBreakByClipping;剪切与文本宽度相同的内容长度,后半部分被删除。

label.lineBreakMode = NSLineBreakByTruncatingHead;前面部分文字以……方式省略,显示尾部文字内容。

label.lineBreakMode = NSLineBreakByTruncatingMiddle;中间的内容以……方式省略,显示头尾的文字内容。

label.lineBreakMode = NSLineBreakByTruncatingTail;结尾部分的内容以……方式省略,显示头的文字内容。

label.lineBreakMode = NSLineBreakByWordWrapping;以单词为显示单位显示,后面部分省略不显示。

15、 adjustsFontSizeToFitWidth//设置字体大小适应label宽度

注:文本自动根据label大小自动调整字体尺寸:adjustFontSizeToFitWidth方法可实现文本自动根据label大小自动调整字体尺寸,直到文本的大小达到了自己设置的label文本尺寸最大、最小值与字符串的最大最小值,要是用这个方法还有一个很大的限制就是只有在numberOfLines设置为1时才能用

label.numberOfLines =1; 

label.adjustsFontSizeToFitWidth = YES;

如果行数是超过了1行,要实现自动调整字体大小功能,就没有可以自适应的系统方法可以使用,只有自己用代码实现,在设计时因为要考虑到手机屏幕的实际大小有限,如果字体太小会影响用户体验,所以要设置一个最小字号的判断,小于最小字号就要用到缩略显示,下面的代码中主要是用到 

CGSize size = [text sizeWithFont:font constrainedToSize:CGSizeMake(100, 180) lineBreakMode:NSLineBreakByCharWrapping];

来得到字体在某一字号下的高度,判断与label高度是否一致,其中text是输入label的文本内容,sizWithFont设置字体,constrainedToSize设置约束文本的矩形大小参数,其中宽度要和label一致,高度设置要足够高,要比label高很多,否则会出现文本显示不全的问题,lineBreakMode的作用上文有讲过。如果算出的高度超出了label高度,就把字号以循环的方式减小直到高度符合就跳出循环。

  floatmaxHeight =50;//设置最大高度 

  floatminFontSize =9; 

  floatheight; 

  intfontSize = 31;//设置最大字号 

  NSString *text = @”输入文本内容”; 

  do{ 

        fontSize = fontSize – 1; 

        UIFont *font =[UIFont fontWithName:@”Arial”size:fontSize]; 

         CGSize size = [text sizeWithFont:font constrainedToSize:CGSizeMake(100, 180)/*宽度与label的宽度一样,高度应高于label高度*/lineBreakMode:NSLineBreakByCharWrapping]; 

        height = size.height; 

        NSLog(@”height=%f,fontSize=%d,text=%@”,height,fontSize,text); 

  } while(height > maxHeight&&fontSize>minFontSize); 

  UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(50, 50, 100, 50)]; 

  label.text =text; 

  if(fontSize ==9) {//判断字体是否小于最小字号,小于最小字号时就使用系统默认的缩略显示 

        label.font = [UIFont fontWithName:@”Arial”size:15]; 

  } 

  else{ 

      label.font = [UIFont fontWithName:@”Arial”size:fontSize]; 

      label.lineBreakMode = NSLineBreakByCharWrapping;//实现文字多行显示 

      label.numberOfLines = 0; 

  } 

  [self.view addSubview:label];

根据文本数量自动调整label高度

其实就是用上面的方法得到高度再生成label

 NSString *text =[[NSString alloc]init]; 

 text = @”输入文本内容”; 

 CGSize size = CGSizeMake(280, 180); 

 UIFont *fonts = [UIFont systemFontOfSize:14.0]; 

 CGSize msgSie = [text sizeWithFont:fonts constrainedToSize:size lineBreakMode: NSLineBreakByCharWrapping]; 

 UILabel *textLabel = [[UILabel alloc] init]; 

 [textLabel setFont:[UIFont boldSystemFontOfSize:14]]; 

 textLabel.frame = CGRectMake(20,70, 280,msgSie.height); 

 textLabel.text = text; 

 textLabel.lineBreakMode = NSLineBreakByCharWrapping;//实现文字多行显示 

 textLabel.numberOfLines = 0; 

 [self.view addSubview:textLabel]; 

16、attributedText:设置标签属性文本。

NSString *text = @”first”;

NSMutableAttributedString *textLabelStr =[[NSMutableAttributedString alloc]initWithString:text];

[textLabelStr setAttributes:@{NSForegroundColorAttributeName :[UIColor lightGrayColor], NSFontAttributeName :[UIFont systemFontOfSize:17]} range:NSMakeRange(11,10)];

label.attributedText = textLabelStr;

17、竖排文字显示每个文字加一个换行符,这是最方便和简单的实现方式。

label.text = @”请\n竖\n直\n方\n向\n排\n列”;

label.numberOfLines = [label.text length];

18、计算UIlabel 随字体多行后的高度

CGRect bounds = CGRectMake(0,0,200,300);

heightLabel = [myLabel textRectForBounds:boundslimitedToNumberOfLines:20];//计算20行后的Label的Frame

NSLog(@”%f”,heightLabel.size.height);

19、UILabel根据字数多少自动实现适应高度

UILabel *msgLabel = [[UILabel alloc]initWithFrame:CGRectMake(15,45,0,0)];

msgLabel.backgroundColor = [UIColor lightTextColor];

[msgLabel setNumberOfLines:0];

msgLabel.lineBreakMode = UILineBreakModeWordWrap;

msgLabel.font = [UIFont fontWithName:@”Arial”size:12];

CGSize size = CGSizeMake(290,1000);

msgLabel.text = @”有天我睡醒看到我的身边没有你在我的右边是你曾经喜欢的玩具可当我站起身来在房间里寻找你留下的只有带着你味道的一封信就在昨天还一起看我们的照片可现在让我感觉像烂剧里的主演为什么这种事情会发生在我身边是不是老天没能看到对你的疯癫”;

CGSize msgSie = [msgLabel.text sizeWithFont:fontsconstrainedToSize:size];

[msgLabel setFrame:CGRectMake(15,45,290, msgSie.height)];

20、渐变字体Label

UIColor *titleColor = [UIColor colorWithPatternImage:[UIImageimageNamed:@”btn.png”]];

NSString *title = @”Setting”;

UILabel *titleLabel = [[UILabel alloc]initWithFrame:CGRectMake(0,0,80,44)];

titleLabel.textColor = titleColor;

titleLabel.text = title;

titleLabel.font = [UIFont boldSystemFontOfSize:20];

titleLabel.backgroundColor = [UIColor clearColor];

[self.view addSubview:titleLabel];

[titleLabel release];

21、Label添加边框

titleLabel.layer.borderColor = [[UIColor grayColor] CGColor];//边框颜色,要为CGColor

titleLabel.layer.borderWidth =2;//边框宽度

22、当label大小使用sizeToFit方法,调整大小时会考虑到该属性中存储的值。例如,如果此属性设置为3,sizeToFit方法会调整label使它大到足以显示三行文本。

[label sizeToFit];

23、设置label圆角

label.layer.cornerRadius = 10; 

24、设置label背景颜色

label.backgroundColor =[UIColor yellowColor];

25、设置label背景图

第一种方法:设置背景图可以把一张大小与label一样的图放在label的后面一层,然后把label的背景设置为透明,这样实现label有背景(这个是一个有点不正统的方法)

UILabel * label = [[UILabel alloc] initWithFrame:CGRectMake(50, 50, 200, 400)]; 

UIImageView *imageView =[[UIImageView alloc]init]; 

imageView.frame =CGRectMake(50, 50, 200, 400); 

UIImage *image=[UIImage imageNamed:@”1.jpg”]; 

imageView.image =image;//imageView会根据自身大小改变添加的图片的大小所以不需要额外设置image 

label.backgroundColor = [UIColor clearColor]; 

label.text =@”hello world”; 

label.font = [UIFont systemFontOfSize:30]; 

label.textColor = [UIColor yellowColor]; 

[self.view addSubview:imageView];//添加的顺序不能错,否则图片会覆盖label 

[self.view addSubview:label];

第二种方法:用UIColor设置图片,然后把UIColor作为背景颜色,就可以实现label设置背景图

UIColor * color = [UIColor colorWithPatternImage:image];//image为需要添加的背景图 

 UILabel * label = [[UILabel alloc] initWithFrame:CGRectMake(50, 50, 100, 200)]; 

 [label setBackgroundColor:color]; 

 [self.view addSubview:label]; 

但是!!!!!第二个方法有一个严重的缺陷,就是当背景图的尺寸与label大小不一致时,会出现背景图被部分截取或者平铺重复的情况,所以更完善的方法是要先修改好背景图的大小与label大小一致再设置背景颜色。可以用下面的函数设置image尺寸

-(UIImage *)scaleImage:(UIImage *)img ToSize:(CGSize)itemSize{ 

      UIImage *i; 

      // 创建一个bitmap的context,并把它设置成为当前正在使用的context 

      UIGraphicsBeginImageContext(itemSize); 

      CGRect imageRect=CGRectMake(0, 0, itemSize.width, itemSize.height); 

      // 绘制改变大小的图片 

      [img drawInRect:imageRect]; 

      // 从当前context中创建一个改变大小后的图片     

      i=UIGraphicsGetImageFromCurrentImageContext(); 

      // 使当前的context出堆栈 

      UIGraphicsEndImageContext(); 

      // 返回新的改变大小后的图片 

      returni; 

然后在主函数中调用即可

  CGSize size= CGSizeMake(100, 200); 

  UIImage *image =[UIImage imageNamed:@”1.jpg”]; 

  UIImage *laterImage =[self scaleImage:image ToSize:size]; 

  UIColor * color = [UIColor colorWithPatternImage:laterImage]; 

  UILabel * label = [[UILabel alloc] initWithFrame:CGRectMake(50, 50, 100, 200)]; 

  [label setBackgroundColor:color]; 

  [self.view addSubview:label]; 

    原文作者:西蜀
    原文地址: https://www.jianshu.com/p/0908918380fe
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞