【问题标题】:How does a UILabel's minimumScaleFactor work?UILabel minimumScaleFactor 是如何工作的?
【发布时间】: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];

【问题讨论】:

    标签: ios objective-c uilabel


    【解决方案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 答案。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-06-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-01-08
      • 1970-01-01
      • 2021-06-24
      • 2017-07-24
      相关资源
      最近更新 更多