UILabel minimumScaleFactor 是如何工作的?

Posted

技术标签:

【中文标题】UILabel minimumScaleFactor 是如何工作的?【英文标题】:How does a UILabel's minimumScaleFactor work? 【发布时间】:2013-01-17 01:00:57 【问题描述】:

我之前使用过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];

【问题讨论】:

【参考方案1】:

您需要设置label.adjustsFontSizeToFitWidth = YES;

【讨论】:

完美,这就是我在自己的代码中所缺少的。谢谢:D 注意:“Apple 的文档说 minimumScaleFactor 仅在 numberOfLines 设置为 1 时才有效。使用 0 或大于 1 的任何值都不起作用。” .谢谢 SeanK。 太棒了!有趣的是,如果在 XIB 中设置 minumumScaleFactor,则不需要设置 adjustsFontSizeToFitWidth,但在代码中设置时需要。【参考方案2】:

除了其他答案所说的之外,如果您将 minSize/defaultSize(除法)作为minimumScaleFactor,它将与使用旧的minimumFontSize 相同。

例如,如果您希望使用默认标签大小的最小字体大小为 10,您可以这样做:

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

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

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

【讨论】:

除法应该强制转换为CGFloat,否则不起作用 @dwery 执行 10/labelSize 最终可能会截断整数值 0,但 10.0 或 10.f 可以正常工作,无需显式转换。 你是对的,它应该可以工作。我不记得它在哪个代码中对我不起作用,可能是缺少 f 或点。【参考方案3】:

根据documentation:

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

因此,如果您的标签的默认字体大小为 10,您将 0.7f 设置为 minimumScaleFactor,它应该与 minimumFontSize 做同样的事情。

【讨论】:

我也是这么想的;但即使我把它设为 0.1f,文本也不会调整大小。我将添加 uilabel 代码。 如果你去掉约束,只是缩小标签的框架呢? Log139:您的 numberOfLines 设置为多少? Apple 的文档说 minimumScaleFactor 仅在 numberOfLines 设置为 1 时才有效。使用 0 或大于 1 的任何值都不起作用。 @SeanK 即使 numberOfLines 设置为大于 1 但不是 0,它也会起作用。【参考方案4】:

除了其他答案,我将添加一个对初学者有帮助的解释:

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

10/25 = 0.4

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

【讨论】:

以上是关于UILabel minimumScaleFactor 是如何工作的?的主要内容,如果未能解决你的问题,请参考以下文章

UIAlertController 或 UITextField 中的 UILabel 类似 UILabel

UILabel

ios6--UILabel

如何调整 UIView 的大小以获取大量 UILabel 并调整 UILabel 的大小以适合文本?

自动调整 UILabel 文本大小以适应 UILabel 宽度

IOS开发调整UILabel的行间距