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];
有没有人知道这个问题的解决办法?
答案 0 :(得分:19)
UILabel
将调整多行文字的字体大小;
numberOfLines
为非零值。lineBreakMode
至NSLineBreakMode.ByTruncatingTail
。例如,
_label.numberOfLines = 2
_label.lineBreakMode = NSLineBreakMode.ByTruncatingTail
_label.adjustsFontSizeToFitWidth = true
_label.minimumScaleFactor = 0.4
经过测试并确认可以使用;
答案 1 :(得分:2)
好吧,看起来这基本上是一个bug,可能在Xcode 6中修复了。 这适用于iOS 7 - 我没有在任何其他版本中测试它。
与此同时,这是我用来缩小文字以适应我的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;
}
}
}
答案 2 :(得分:1)
同样的事情发生在我身上,我使用的是非标准字体:
titleLabel.font = [UIFont fontWithName:@"IRANSans" size:27 ];
titleLabel.numberOfLines = 1;
titleLabel.minimumScaleFactor = 0.01;
titleLabel.adjustsFontSizeToFitWidth = YES;
我发现问题是UILabel的大小,它的自我也在增长,我只是添加了一个约束来保持标签的宽度固定,然后它就像一个魅力。 附:我在xcode 7.1,iOS 9.2.1
答案 3 :(得分:0)
因为使用
self.testLabel.lineBreakMode=NSLineBreakByWordWrapping;
每个单词都成为他自己的行(在你的情况下)