UILabel的minimumScaleFactor如何工作?


109

我以前使用minimumFontSize过,但是现在不赞成使用该功能,我不太了解它是如何minimumScaleFactor工作的。

我希望最大字体大小为10,最小为7。

如何使用缩放系数实现将字体大小调整为7。

UILabel 创建:

UILabel *label = [[UILabel alloc] init];
[label setTranslatesAutoresizingMaskIntoConstraints:NO];
label.text =  [labelName uppercaseString];
label.textAlignment = NSTextAlignmentCenter;
label.textColor = [UIColor whiteColor];
label.font = [UIFont fontWithName:HELVETICA_FONT_STYLE_BOLD size:9.5];
label.backgroundColor = [UIColor clearColor];
label.minimumScaleFactor = .1f;

[label addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:[label(WIDTH)]"
                                                              options:0
                                                              metrics:@{@"WIDTH" : [NSNumber numberWithFloat:buttonSize.width]}
                                                                views:NSDictionaryOfVariableBindings(label)]];

[contentView addSubview:label];

Answers:


204

您需要设置 label.adjustsFontSizeToFitWidth = YES;


1
完美,这就是我自己的代码中所缺少的。谢谢:D
Fogmeister 2013年

14
注意:“ Apple的文档说,只有将numberOfLines设置为1时,minimumScaleFactor才有效。使用0或大于1的任何值将不起作用。” 。谢谢SeanK。
samthui7 2015年

太棒了!有趣的是,如果您在XIB中设置minumumScaleFactor,则不需要设置AdjustsFontSizeToFitWidth,但是在执行代码时则需要。
Politta'3

104

除了其他答案外,如果将minSize / defaultSize(division)设置为minimumScaleFactor,则它将与使用old相同minimumFontSize

例如,如果您希望使用默认标签大小将最小字体大小设置为10,则可以执行以下操作:

[label setMinimumScaleFactor:10.0/[UIFont labelFontSize]];

[UIFont labelFontSize]如果不是默认字体,请替换为标签的字体大小)。

与以下内容相同: [label setMinimumFontSize:10.0];


该部门应
强制转换

@dwery做10 / labelSize可能会以0的整数值截断,但是10.0或10.f可以正常工作,而无需显式强制转换。
Kalle

您说得对,应该可以。我不记得它在哪个代码中不起作用,可能是缺少f或点。
dwery

20

根据文档

使用此属性可以指定当前字体大小的最小乘数,该最小乘数会产生可接受的字体大小,以显示标签的文本。如果为此属性指定值0,则将当前字体大小用作最小字体大小。

因此,如果标签的默认字体大小为,则将其10放置0.7fminimumScaleFactor,它应该做的和minimumFontSize以前一样。


那也是我的想法;但是即使我把它设为0.1f,文本也不会调整大小。我将添加uilabel代码。
Padin215

如果您删除约束并仅缩小标签框架怎么办?
kovpas

9
Log139:您的numberOfLines设置为什么?苹果的文档说,minimumScaleFactor仅在numberOfLines设置为1时才起作用。使用0或大于1的任何值将不起作用。
SeanK

1
@SeanK即使numberOfLines设置为超过1它将工作,但不为0
阿萨杜拉·阿里

12

除了其他答案,我还将添加一个对初学者友好的说明,该说明对自己有所帮助:

如何计算minimumScaleFactor?用标签的默认字体大小除标签的最小字体大小。例如,默认字体大小为25。最小字体大小为10。

10/25 = 0.4

0.4是您的minimumScaleFactor价值。另请参见上面的@Jsdodgers的答案。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.