UILabel的宽度设置

因为项目开发中经常碰到界面设计的UILabel多语言适配问题,所以在这里记录下自己处理这些问题中的一些心得。假如你的工程中需要用到UILabel显示一个简单的文本“你好”,并支持日文显示,日文你好“こんにちは”,一般UI设计师会给你UILabel的尺寸,例如40pt。于是你开始写代码:

    UILabel *chineseLabel = [[UILabel alloc] init];
    chineseLabel.text = @"你好"; 
    chineseLabel.textAlignment = NSTextAlignmentCenter;
    chineseLabel.backgroundColor = [UIColor redColor];
    chineseLabel.textColor = [UIColor whiteColor];
    
    [self.view addSubview:chineseLabel];
    [chineseLabel mas_makeConstraints:^(MASConstraintMaker *make) {
        make.centerX.equalTo(self.view);
        make.centerY.equalTo(self.view).offset(-40);
        make.width.mas_equalTo(40);
    }];

最后显示出来的结果很好:


chinese.png

但是当切换到日文的时候,显示的结果却会变成这样子:


image.png

日文的"你好"没有显示完全,很明显这是因为你的宽度设置了40pt,也许有人会觉得可以修改宽度到60pt就可以了。没错,这是最简单粗暴的方法。但是你必须考虑到一个项目支持的往往不止日文,可能还会包括英文,泰文,韩文等等。所以对每一个语言进行判断,然后适配宽度,就会显得比较低效,也不易后期的维护。

解决UILabel的多语言适配问题,我觉得可以根据label的宽度和字体是否可变分为三种情况进行处理:

  • label的宽度可变:
    label的宽度可变的话,我们可以利用UILabelsizeToFit方法,让label根据文本大小自适应宽度。我们并不需要在代码中强制去设置label的宽度,代码如下所示:
      UILabel *jpLabel = [[UILabel alloc] init];
      jpLabel.text = @"こんにちは";
      jpLabel.textAlignment = NSTextAlignmentCenter;
      jpLabel.backgroundColor = [UIColor redColor];
      jpLabel.textColor = [UIColor whiteColor];
      [jpLabel sizeToFit];
      
      [self.view addSubview:jpLabel];
      [jpLabel mas_makeConstraints:^(MASConstraintMaker *make) {
          make.center.equalTo(self.view);
         // make.width.mas_equalTo(40);
      }];
    
    显示结果如下所示:
image.png
  • label的宽度不可变:
    有时候设计的UI比较复杂,如果某一个label的宽度变了,会影响到其他界面的显示,那么我们就不能随意的根据文本的长度修改label的宽度。这时候我们可以考虑使用UILabeladjustsFontSizeToFitWidth属性。这个属性的作用是如果文本的长度超出了label的宽度,则缩小文本的字体大小来让文本完全显示。代码如下:

      UILabel *chineseLabel = [[UILabel alloc] init];
      chineseLabel.adjustsFontSizeToFitWidth = YES;
      chineseLabel.text = @"你好";
      chineseLabel.textAlignment = NSTextAlignmentCenter;
      chineseLabel.backgroundColor = [UIColor redColor];
      chineseLabel.textColor = [UIColor whiteColor];
      [chineseLabel sizeToFit];
      
      [self.view addSubview:chineseLabel];
      [chineseLabel mas_makeConstraints:^(MASConstraintMaker *make) {
          make.centerX.equalTo(self.view);
          make.centerY.equalTo(self.view).offset(-40);
          make.width.mas_equalTo(40);
      }];
      
      UILabel *jpLabel = [[UILabel alloc] init];
      jpLabel.adjustsFontSizeToFitWidth = YES;
      jpLabel.text = @"こんにちは";
      jpLabel.textAlignment = NSTextAlignmentCenter;
      jpLabel.backgroundColor = [UIColor redColor];
      jpLabel.textColor = [UIColor whiteColor];
      
      [self.view addSubview:jpLabel];
      [jpLabel mas_makeConstraints:^(MASConstraintMaker *make) {
          make.center.equalTo(self.view);
          make.width.mas_equalTo(40);
      }];
    

    显示结果如下所示:


    UILabel的宽度设置_第1张图片
    image.png
  • label的字体和宽度都不可变

    当遇到这种情况的时候,我觉得已经不是代码层面可以搞定的时候,这时候可以寻求产品大大和翻译大大的帮助,看下是否可以缩短文案的长度~~

特别说明一点

  1. adjustsFontSizeToFitWidth只是根据你设置的初始字体大小去缩小字体,即当你设置的初始font大小为14的时候,设置adjustsFontSizeToFitWidth为YES,字体大小都只会小于等于14.

  2. UILabel还有一个属性minimumScaleFactor,可以通过这个属性设置字体可缩小的最小比例。一般可以配合adjustsFontSizeToFitWidth一起使用。

你可能感兴趣的:(UILabel的宽度设置)