如果在iOS 7中adjustsFontSizeToFitWidth为YES时如何从UILabel获取调整后的字体大小?

时间:2013-10-05 11:10:54

标签: ios nsstring uikit uilabel textkit

我有一个设置为adjustsFontSizeToFitWidth = YES的标签,我需要获取实际显示的字体大小。

现在,iOS 7弃用了之前有效的所有方法,所有关于SO的问题建议使用这些弃用的方法。

一旦我被SO允许,我就会把这个问题作为赏金。请不要关闭。

4 个答案:

答案 0 :(得分:0)

在iOS 7中使用adjustsFontSizeToFitWidth时,UILabel显示了fontSize Objective-C

 UILabel *label=[[UILabel alloc]initWithFrame:CGRectMake(0, 0, 100, 40)];
 label.text = @" Your Text goes here into this label";
 label.adjustsFontSizeToFitWidth = YES;
 NSMutableAttributedString *attrStr = [[NSMutableAttributedString alloc] initWithAttributedString:label.attributedText];
//Get the theoretical font-size
[attrStr setAttributes:@{NSFontAttributeName:label.font} range:NSMakeRange(0, attrStr.length)];
 NSStringDrawingContext *context = [NSStringDrawingContext new];
 context.minimumScaleFactor = label.minimumScaleFactor;
 [attrStr boundingRectWithSize:label.frame.size options:NSStringDrawingUsesLineFragmentOrigin context:context];
 CGFloat theoreticalFontSize = label.font.pointSize * context.actualScaleFactor;

 NSLog(@"theoreticalFontSize: %f",theoreticalFontSize);
 NSLog(@"AttributedString Width: %f", [attrStr size].width);
 double scaleFactor=label.frame.size.width/([attrStr size].width);
 double displayedFontSize=theoreticalFontSize*scaleFactor;
 NSLog(@"Actual displayed Font Size:%f",displayedFontSize);


//Verficiation of Result
 double verfication=(displayedFontSize * [attrStr length]);
 NSLog(@"Should be equal to %0.5f: %0.5f ", [attrStr size].width/17.0, label.frame.size.width/displayedFontSize);

答案 1 :(得分:-1)

在请求字体大小之前尝试插入[lblObj sizeToFit]

答案 2 :(得分:-2)

有一个只读属性可以让你这样做。您可以像这样访问它

nameLabel.adjustsFontSizeToFitWidth = YES;

//Make sure to use the line below AFTER the line above

float fontSize = nameLabel.font.xHeight;

这将在调整到适合宽度后为您提供字体大小。

答案 3 :(得分:-2)

您可以使用以下代码行获取UILabel 文字的字体大小。

UILabel *lblObj = [[UILabel alloc]init];
lblObj.text = @" Your Text";
lblObj.adjustsFontSizeToFitWidth = YES;
float size = lblObj.font.pointSize; //Here You will get the actual size of the text.
float lineHeight = lblObj.font.lineHeight;

试试这个。

相关问题