为什么这打破UILabel adjustsFontSizeToFitWidth?

iOS 7,Xcode 5

使用UILabel,这个代码工作(自动化文本以适应):

self.testLabel.numberOfLines=0; self.testLabel.lineBreakMode=NSLineBreakByWordWrapping; self.testLabel.adjustsFontSizeToFitWidth=YES; self.testLabel.minimumScaleFactor=0.1; self.testLabel.textAlignment=NSTextAlignmentCenter; [self.testLabel.font fontWithSize:100.0]; 

在这里输入图像说明

但是,添加“setFont”行使它不能缩放字体以适应:

 [self.testLabel setFont:[UIFont fontWithName:@"Helvetica Neue" size:62.0f]]; //THIS LINE CAUSES THE FONT SCALING TO FAIL self.testLabel.numberOfLines=0; self.testLabel.lineBreakMode=NSLineBreakByWordWrapping; self.testLabel.adjustsFontSizeToFitWidth=YES; self.testLabel.minimumScaleFactor=0.1; self.testLabel.textAlignment=NSTextAlignmentCenter; [self.testLabel.font fontWithSize:100.0]; 

在这里输入图像说明

有谁知道这个问题的解决办法?

如果设置, UILabel将调整多行文本的字体大小;

  1. numberOfLines为非零值。
  2. lineBreakModeNSLineBreakMode.ByTruncatingTail

例如,

  _label.numberOfLines = 2 _label.lineBreakMode = NSLineBreakMode.ByTruncatingTail _label.adjustsFontSizeToFitWidth = true _label.minimumScaleFactor = 0.4 

经过testing并确认与之合作;

  • Xcode 7.1.1
  • 与iOS 9.0.1的iPhone 6设备
  • iPhone 4S模拟器与iOS 8.4
  • iPhone 4S模拟器与iOS 8.1

那么,这似乎是基本上是一个错误,也许在Xcode 6中修复。这在iOS 7中的工作 – 我没有在任何其他版本中testing它。

同时,这是我用来缩放文本以适应我的UILabel,用多行和AttributedString的方法:

 -(void)whAlertDisplayTheNotice:(UILabel*)inputlabel theNotice:(NSString*)theNotice { float maxFontSize=80.0; NSRange tmpRange=NSMakeRange(0,theNotice.length); NSMutableParagraphStyle *paragraph=[[NSMutableParagraphStyle alloc]init]; paragraph.lineBreakMode=NSLineBreakByWordWrapping; paragraph.alignment=NSTextAlignmentCenter; paragraph.maximumLineHeight=maxFontSize; paragraph.lineSpacing=0; NSMutableAttributedString *attString=[[NSMutableAttributedString alloc] initWithString:theNotice]; [attString addAttribute:NSParagraphStyleAttributeName value:paragraph range:tmpRange]; [attString addAttribute:NSForegroundColorAttributeName value:[UIColor blackColor] range:tmpRange]; CGSize constraintSize=CGSizeMake(inputlabel.frame.size.width, CGFLOAT_MAX); CGRect labelSize; for(short i=maxFontSize; i>8; i--){ [attString addAttribute:NSFontAttributeName value:[UIFont fontWithName:@"MV Boli" size:i] range:tmpRange]; inputlabel.attributedText=attString; labelSize=[inputlabel.attributedText boundingRectWithSize:constraintSize options:(NSStringDrawingUsesLineFragmentOrigin|NSStringDrawingUsesFontLeading) context:nil]; if(labelSize.size.height<inputlabel.frame.size.height){ NSLog(@"fontsize is:%li",(long)i); break; } } } 

同样的事情发生在我身上,我正在使用一个非标准的字体:

  titleLabel.font = [UIFont fontWithName:@"IRANSans" size:27 ]; titleLabel.numberOfLines = 1; titleLabel.minimumScaleFactor = 0.01; titleLabel.adjustsFontSizeToFitWidth = YES; 

我发现问题是UILabel的大小,我自己也在增长,我只是添加了一个约束来保持标签的宽度固定,然后它就像一个魅力。 PS我在Xcode 7.1,iOS 9.2.1

因为使用

 self.testLabel.lineBreakMode=NSLineBreakByWordWrapping; 

每一个单词成为他自己的行(在你的情况)