如何在iOS自动布局中动态更改字体大小?

时间:2016-02-02 12:20:15

标签: ios xcode autolayout

我希望将文字放在UILabel中,但对于不同的iPhone,UILabel的大小正在发生变化,因为我使用自动布局,但我无法修复字体大小,所以我的文字正在删除。

我有什么方法可以设置任何约束,以便文本动态地适应UILabel

See here the text got cut, because of different screen resolution

3 个答案:

答案 0 :(得分:56)

您应该使用自动收缩

由于所有iPhone在纵向模式下都具有相同的Compact width尺寸等级,因此您不能依赖它来处理标签尺寸。

预览适用于iPhone5,iPhone6和iPhone 6 +

enter image description here

在检查器中,您必须在自动收缩前选择最小字体比例或最小字体大小。这使内容可以更改字体的大小以适合标签。

在这里,我将最小字体比例设置为0.5,因此最小尺寸是当前尺寸的一半(31.0)。文本将尝试适合,直到达到最小比例/大小。

(一般不要使用“收紧字母间距”。紧固字母间距使用相同的字体大小,减少字母之间的间距。它可以使标签在截断前最多缩小5%,但是当最小化时它无效字体比例/大小已启用。)

您可能希望使用宽屏设备(例如 iPad Pro )以及较小的屏幕(例如 iPhone 4S )进行测试。

自动收缩不会将字体大小调整为大于标签上设置的字体大小,这意味着如果您使标签与屏幕的宽度相同但将字体大小保留为 14 ,则会尝试增加字体大小,直到达到那个大小。

要使其真正有效,请选择字体大小。

您仍然可以将自动收缩与大小类组合,以根据设备/方向更改最大字体大小。

如果您想将自动收缩UIButton一起使用,您仍然可以使用两行代码设置此行为。

myButton.titleLabel.minimumScaleFactor = 0.5;
myButton.titleLabel.adjustsFontSizeToFitWidth = YES;

答案 1 :(得分:6)

如果您要从故事板添加UILabel,您可以为所有可用布局设置不同的字体。

enter image description here

答案 2 :(得分:6)

您可以使用大小类来完成此操作。 每个显示尺寸使用尺寸等级,这将产生四个抽象装置:常规宽度 - 常规高度,常规宽度 - 紧凑高度,紧凑宽度 - 常规高度和紧凑宽度 - 紧凑高度。 下表显示了iOS设备及其相应的大小类。  enter image description here

要设置此特定尺寸类的字体大小,请先选择UILabel。在“属性”检查器下,您应该在字体字段旁边看到加号(+)按钮。单击+按钮并选择Compact Width>常规高度(或根据您的要求选择宽度和高度)。然后,您将看到Font选项的新条目,该条目专用于该特定大小类。保持原始Font选项的大小不变,但将wC hR(根据您选择的OR)字体字段的大小更改为所需的点(例如14)。

enter image description here