根据设备大小在多行 UIButton 上缩放字体

Posted

技术标签:

【中文标题】根据设备大小在多行 UIButton 上缩放字体【英文标题】:Scaling a font on a multilined UIButton depending on a device size 【发布时间】:2017-01-16 12:57:12 【问题描述】:

当前设置:

我有一个multilined UIButton,它被添加到它的超级视图中(一个普通的UIView)。 Button 的宽度是其父视图的 90%。因此,当其父视图的大小发生变化时,标签的宽度会因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 设备上我会得到这样的信息:

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

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

我尝试过的:

我尝试结合minimumScaleFactore = 15 设置最大字体大小(将在iPad 设备上使用)。所以我将字体大小设置为 25,现在所有内容在 iPad 和 iPhone 上看起来都更容易接受,但在 iPhone 设备上,由于 minimumScaleFactor 的工作原理,文本仍然比我需要的大一点。

有什么办法可以解决这个问题?

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

【问题讨论】:

所以基本上,我正在寻找一种以某种方式设置所有这些的方法,最好是通过 IB,或者如果不可能,通过代码,但我试图避免根据检测到的设置字体以编程方式进行设备。我的意思没有什么不好,但我想知道有没有更优雅的东西。 【参考方案1】:

您可以使用大小类来指定 IB 中按钮/标签上的字体。只需按字体属性左侧的小 + 号:

【讨论】:

这看起来很有希望......我怎么没注意到这个:) 这非常有效。我会尽快奖励这个答案(由于系统的工作方式,我必须再等 4 个小时左右)【参考方案2】:

遗憾的是,您无法根据尺寸等级改变界面构建器中按钮的字体;但是,您可以根据尺寸等级删除整个控件。选择属性检查器 (Option+command+4) 并选择您的按钮。一直滚动到底部,您将看到一个用于安装的复选框,左侧有一个小加号按钮。如果单击加号,您现在可以添加大小类别的变体来卸载此控件。专门为Regular Width Regular Height(非分屏的iPad)卸载它。现在使用您的 iPad 属性制作第二个按钮,并仅为常规宽度常规高度安装它。您现在有两个不同的按钮:1) 用于没有分屏的 iPad,一个用于其他所有按钮,无需代码。您可以将它们设置为调用相同的 IBAction。看到这个link for more。

【讨论】:

Sadly you cannot vary the font for the button in interface builder based on the size class:这不是真的。看我的回答。 乔希,你提出的建议也有效,所以你有我的赞成票,但在这种情况下,米海的回答是更优雅的解决方案。不过,您的第一句话似乎具有误导性,因此您可能需要编辑您的答案,以便对未来的读者更有用。

以上是关于根据设备大小在多行 UIButton 上缩放字体的主要内容,如果未能解决你的问题,请参考以下文章

如何根据WatchKit中的手表大小缩放字体大小?

在 WKWebView 上禁用字体缩放

使字体大小适合封闭按钮?

c#控件多行显示不同字体大小

动态字体大小缩放

根据容器的宽度和高度缩放字体大小[重复]