【发布时间】:2018-02-15 16:21:27
【问题描述】:
我有一个应用程序,仅适用于横向模式下的 iPad。屏幕设计完全在 IB 中完成,带有自动布局。
现在我想实现以下行为:在 iPad Pro 12" 上时,所有标签的字体大小应为 48,对于所有较小的 iPad 尺寸,字体大小应为 32。
我在 IB 中尝试了具有自动收缩和最小字体大小的各种选项,但随后应用程序会选择 48 到 32 之间的字体大小并给出随机外观。但我只想为 12" 设置 48 个或为所有较小的设备设置 32 个 - 为了获得一致的外观,两者之间没有任何关系。
我的下一个想法是在 IB 中将所有标签的固定字体大小设置为 32,并给所有标签一个标签,并在“viewDidLoad”上的每个视图控制器中运行以下代码:
UIDevice 扩展
public var isPadPro12: Bool {
if (UIDevice.current.userInterfaceIdiom == UIUserInterfaceIdiom.pad
&& UIScreen.main.nativeBounds.size.height == 2732) {
return true
}
return false
}
在“viewDidLoad”中调用的代码
func adjustFont() {
let isPro12 = UIDevice.current.isPadPro12
if isPro12 {
for subview in view.subviews {
if subview.tag == 999 {
if let labelView = subview as? UILabel {
labelView.font = labelView.font.withSize(48)
print ("font size \(labelView.font)")
}
}
}
}
}
它仅适用于某些标签,其他一些仍在 32 中。我该怎么做才能将标签强制为 48?自动布局有问题吗?标签只有宽度约束和上边距以及 X/Y 位置。
编辑 当我在字体大小调整后添加调试打印时,我得到以下结果:
font size Optional(<UICTFont: 0x7fcbf7c2ea90> font-family: "Arial"; font-weight: normal; font-style: normal; font-size: 48.00pt)
但是字体大小肯定不是48,看起来和在IB里直接设置字体大小为48不一样。
【问题讨论】:
-
您确定将 999 设置为所有标签的标签吗?
-
是的,当然。
-
你这里没有做深度循环。您确定所有标签都在视图级别吗?
-
@Gihan:是的,所有标签都是视图的直接子级。我在上面的循环中确实打印了debugs,字体大小调整的那一行肯定被调用了。
-
您不应根据设备类型做出这些决定。当用户使用多任务处理并且您的应用程序仅占用屏幕的 1/3 时,您是否仍然想要不同的字体?根据视图大小而非设备做出决定。
标签: ios swift autolayout uilabel