根据设备大小缩放多线UIButton上的字体

当前设置:

我有一个多线 UIButton被添加到它的超级视图(一个普通的UIView )。 button的宽度是其超视图的90%。 所以当它的Autolayout视图尺寸发生变化时,由于Autolayout约束,标签的宽度会相应地Autolayout

接下来,在viewDidLoad方法里面我做了这个:

  //Line break mode and Font size ( are set in Interface Builder myButton.titleLabel?.adjustsFontSizeToFitWidth = true myButton.titleLabel?.minimumScaleFactor = 15.0 myButton.titleLabel?.numberOfLines = 2 

所以,现在,当我有很长的文字,在iPhone设备上,我得到这样的东西: iPhone的外观

这正是我想要的。 但是,当然,这在iPad设备上看起来不同。 例如,这是在iPad Pro 9.7“:

iPad Pro的外观

正如所看到的,一切看起来都很小而且很糟糕。

我曾经尝试过:

我试图设置最大字体大小(将在iPad设备上使用),并结合minimumScaleFactore = 15 。 所以我把字体大小设置为25,现在在iPad和iPhone上都可以接受,但是在iPhone设备上,由于minimumScaleFactor的工作原理,文本比我需要的大一些。

什么是解决这个问题的方法?

我更喜欢这样(在所有iPad和iPhone设备上获得相似的外观):

所需的iPad外观

您可以使用大小class级在IB中指定button/标签上的字体。 只需按下字体属性左侧的小号+号即可:

只需按下字体属性左侧的小号+号即可

可悲的是你不能改变基于尺寸类的界面生成器中的button的字体; 但是,您可以根据大小类删除整个控件。 select您的buttonselect属性检查器(选项+命令+ 4)。 一直滚动到底部,您将看到一个checkbox,在左侧安装了一个小加号button。 如果单击加号,现在可以添加大小类的变体来卸载此控件。 特别是将其卸载为Regular Width Regular(非iPad分屏下的iPad)。 现在制作第二个带有iPad属性的button,并将其安装为常规宽度常规高度。 你现在有两个不同的button:1)iPad没有分屏,一个用于其他任何事情,不需要代码。 你可以设置它们来调用相同的IBAction。 看到这个链接更多 。