根据设备大小在多行 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 上缩放字体的主要内容,如果未能解决你的问题,请参考以下文章