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
如何调整 UIView 的大小以获取大量 UILabel 并调整 UILabel 的大小以适合文本?