Почему это нарушает UILabel adjustsFontSizeToFitWidth?
iOS 7, Xcode 5
используя UILabel, этот код работает (autosizes текст, чтобы соответствовать):
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];
кто-нибудь знает решение этой проблемы?
4 ответов
UILabel
будет регулировать размер шрифта для многострочного текста, если вы установите;
-
numberOfLines
к ненулевому значению. -
lineBreakMode
toNSLineBreakMode.ByTruncatingTail
.
например,
_label.numberOfLines = 2
_label.lineBreakMode = NSLineBreakMode.ByTruncatingTail
_label.adjustsFontSizeToFitWidth = true
_label.minimumScaleFactor = 0.4
протестировано и подтверждено для работы с;
- Xcode 7.1.1
- iPhone 6 устройство с iOS 9.0.1
- симулятор iPhone 4S с iOS 8.4
- iPhone 4s симулятор с iOS 8.1
Ну, похоже, что это в основном ошибка, возможно, исправлена в 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;
}
}
}
то же самое случилось со мной, я использую нестандартный шрифт :
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
из-за использования
self.testLabel.lineBreakMode=NSLineBreakByWordWrapping;
каждое слово становится его собственной линии (в вашем случае)