以编程方式调整每个设备的字体大小

Font Sizing Per Device Programmatically

我正在尝试更改 UILabel 的文本,使每个设备的文本看起来完全相同。

在这里,我有 4 个不同的模拟器:按顺序 8Plus, 7, 5s, XR。如您所见,文本看起来不同。在第一个模拟中,它比第三个小。我怎样才能使它在每个设备上缩放并看起来相同,即文本符合框的大小?

let label = UILabel(frame: button.bounds)
    label.text = "Done"
    label.minimumScaleFactor = 0.2
    label.textAlignment = .center
    label.textColor = .white
    label.font = UIFont(name: label.font.fontName, size: 20)
    label.adjustsFontSizeToFitWidth = true
    label.isUserInteractionEnabled = true

On the first simulation, it's smaller than say the 3rd one.

不,不是。看起来是这样,因为 iPhone 5S(640x1136 点)的屏幕比 iPhone Xs(1125x2436)的屏幕小。此外,文本在其背景下看起来很小,因为背景有固定的限制,导致其在所有设备上调整大小。

为了让您的文本在所有屏幕上的背景看起来都相似,您必须将 UILabel 的顶部、前导、底部和尾部约束设置为与超级视图的相同(使用自定义常量)

...然后像你​​一样,为你的标签设置minimumScaleFactor

因此,如果您将 字体大小 设置为 20,则 最大 字体大小将为 20。如果您的标签 应该更小 (由于您设置的限制,space 不够),您的标签将具有您设置的 最大可能的 字体大小作为最小比例因子。