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

33

尝试降低标签的内容吸附优先级。 - iAnurag
1
你需要通过编程设置字体大小。 - user5570620
居中,对齐 - Muntaqeem Labbaeik
有没有不需要编写任何代码的选项?只需设置约束条件?或者类似的东西?@MilanPatel - Muntaqeem Labbaeik
如果不缩小字体大小,你应该如何将文本适配到动态尺寸变化的标签中?@DivyeshSavaliya - Muntaqeem Labbaeik
显示剩余5条评论
3个回答

64

你应该使用自动收缩

由于所有的iPhone在竖屏模式下都有相同的紧凑宽度大小类,因此您不能依赖它来处理您的标签尺寸。


预览适用于iPhone5、iPhone6和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;

@Joe Blow,你不必使用巨大的字号来使其工作,只需将标签上的最大字号设置好——你想在iPad Pro上使用的那个字号。始终要在所有屏幕大小上进行测试,你可以使用预览辅助编辑器轻松进行预览,就像我展示的那样。 - Crazyrems
嗨@Crazyrems - 你说得很对; 但不要忘记,新的机器总是会发布,拥有更多的物理像素!再次感谢您提供的好答案。您可能会发现这个链接有用...http://stackoverflow.com/q/37266118/294884..或者您甚至知道那里的答案? - Fattie
@Crazyrems,我们如何对文本字段或文本视图进行此操作? - ARS
@ARS 你可以对文本字段执行相同的操作,但是没有公共属性可以访问标签。您将不得不浏览其所有子项并检查它是否为标签,然后设置自动收缩功能。 - Crazyrems
@Crazyrems,在我的情况下,我有一个标签在一个受限制的视图中,固定使标签缩放以适应视图。我将标签的最小字体比例因子设置为0.5,这样可以很好地缩小较小的设备(如iPhone)的类型。只有一行(实际上只有一个数字),所以从逻辑上讲,你会认为将行数设置为1应该可以工作,但在我的情况下,它不起作用——缩放完全停止工作。将其设置为任何其他数字(0、2、145等),缩放就会重新开始工作!这种行为对你来说有意义吗?无论如何,我很高兴它能正常工作。 :-) - Kal
显示剩余3条评论

10

您好,如果您从Storyboard中添加UILabel,您可以为所有可用布局设置不同的字体。

输入图像描述


非常感谢您的完美回答!!为什么是完美的?因为它适用于uilabel字体和uibutton字体!!!但是,自动调整大小不适用于uibutton。 - James
1
@WilliamsOuiOui autoshrink 可以与 UIButton 一起使用,一个按钮包含一个 UILabel :). 只需设置您的 UIButtontitleLabel autoshrink 属性即可。我已更新我的答案。 - Crazyrems
我在其他地方没有看到过这个。这是一个非常有用的工具,我很高兴我滚动到足够低的位置才看到它。就像自动布局中唯一可靠的东西一样... - MarshallD
哎?我在Xcode 10.2.1中的UILabel上找不到那个选项。有什么想法吗? - Richard R

6
您可以使用大小类来实现。对于每个显示维度使用一个大小类,这将会得到四个抽象设备:常规宽度-常规高度、常规宽度-紧凑高度、紧凑宽度-常规高度和紧凑宽度-紧凑高度。
下面的表格展示了iOS设备及其对应的大小类。
enter image description here 要为特定的大小类设置字体大小,首先选择UILabel。在属性检查器下方,您应该看到字体字段旁边有一个加号(+)按钮。单击+按钮并选择Compact Width>Regular Height(或根据您的要求选择宽度和高度)。然后您将看到一个专门针对该特定大小类的字体选项的新条目。保持原始字体选项的字号不变,但将wC hR(或根据您的选择)字体字段的大小更改为所需点数(例如14)。
enter image description here

谢谢,这很有用。还有其他方法吗?或者我能否创建标签大小和字体大小之间的关系并设置约束? - Muntaqeem Labbaeik
你可以使用UILable的adjustsFontSizeToFitWidth属性。 https://developer.apple.com/library/ios/documentation/UIKit/Reference/UILabel_Class/index.html#//apple_ref/occ/instp/UILabel/adjustsFontSizeToFitWidth - Madan gupta

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接