为什么这打破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
将调整多行文本的字体大小;
-
numberOfLines
为非零值。 -
lineBreakMode
到NSLineBreakMode.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;
每一个单词成为他自己的行(在你的情况)