逐步更改iPad Pro的字体大小

我有一个应用程序,仅适用于横向模式的iPad。 屏幕设计完全在IB中完成,具有自动布局function。

现在我想实现以下行为:在iPad Pro 12“上,所有标签的字体大小应为48”,而对于所有较小的iPad尺寸,字体大小应为32。

我尝试了自动收缩和最小字体大小的IB中的各种选项,但随后应用程序选择48-32之间的字体大小并给出随机的外观。 但我只想拥有48英寸12英寸或32英尺所有更小的设备 – 两者之间没有任何东西,以获得一致的外观。

我的下一个想法是在IB中将所有标签的固定字体大小设置为32,并为所有标签提供标签,并在’viewDidLoad’上的每个viewcontroller中运行以下代码:

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? autolayout有问题吗? 标签只有宽度约束和上边距,以及X / Y位置。

编辑当我在字体大小调整后添加调试打印时,我得到以下结果:

 font size Optional( font-family: "Arial"; font-weight: normal; font-style: normal; font-size: 48.00pt) 

但字体大小绝对不是48.它看起来不同于将IB中的字体大小直接设置为48。

  1. 子类UILabel,为Interface Builder中的每个uilabel设置该类。

  2. 为要支持的所有不同类型/字体创建枚举,并在该枚举中创建一个返回例如字体大小的函数

  3. 确定当前设备并将其存储在枚举中的值中

  4. 在步骤1中覆盖子类UILabel的初始值设定项,并从步骤3中定义的varbele中获取字体大小,并在步骤2中使用vales

码:

 var currentScreen = Screens.iPadLarge //change this to current device enum Screens{ case iPadLarge, iPadSmall func getFont() -> CGFloat{ switch self{ case .iPadLarge: return 40 case .iPadSmall: return 20 } } } class MyLabel: UILabel{ init(frame: CGRect){ super.init(frame: frame) commonLoad() } required init?(coder aDecoder: NSCoder) { super.init(coder: aDecoder) commonLoad() } func commonLoad(){ let fontSize = currentScreen.getFont() //use fontSize } }