14

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

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

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

4

4 回答 4

0

UILabel 在 iOS 7 中使用 adjustsFontSizeToFitWidth 时显示 fontSize

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);

// Verification of Result
double verification=(displayedFontSize * [attrStr length]);
NSLog(@"Should be equal to %0.5f: %0.5f ", [attrStr size].width/17.0, label.frame.size.width/displayedFontSize);
于 2016-10-05T06:47:12.813 回答
-1

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

于 2015-11-16T19:48:58.530 回答
-2

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

nameLabel.adjustsFontSizeToFitWidth = YES;

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

float fontSize = nameLabel.font.xHeight;

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

于 2013-10-06T21:45:08.277 回答
-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;

试试这个。

于 2014-08-06T12:31:39.947 回答