在我最初的视图控制器中,我有UITabbarController
一个子视图控制器。
我想UITabbarController
显示它UITabbar
的 traitCollection 具有紧凑的 HorizontalSizeClass 以便在标签栏中,图像和标题显示为垂直对齐而不是并排。
iOS13 现在不支持覆盖 UITabbarController 的 traitCollection getter,Xcode 给出以下警告。
override var traitCollection: UITraitCollection{
let current = super.traitCollection
let compact = UITraitCollection(horizontalSizeClass: .compact)
return UITraitCollection(traitsFrom: [current, compact])
}
MyTabbarController 类覆盖不支持的 -traitCollection getter。如果您尝试覆盖特征,则必须使用适当的 API。
在研究了合适的 API 之后,我发现
open func setOverrideTraitCollection(_ collection: UITraitCollection?, forChild childViewController: UIViewController)
在实现这个之后,我能够覆盖 myTabbarController 的特征集合,但只有在视图改变方向之后。仅当我将 viewWillTransition 覆盖为方法时,此 API 才有效。
override func viewWillTransition(to size: CGSize, with coordinator: UIViewControllerTransitionCoordinator) {
super.viewWillTransition(to: size, with: coordinator)
let currentTC = traitCollection
let compactTC = UITraitCollection(horizontalSizeClass: .compact)
let custom = UITraitCollection(traitsFrom: [currentTC, compactTC])
print("ovverride trait collections before transition")
setOverrideTraitCollection(custom, forChild: tabController)
}
我只能在设备旋转时覆盖特征。如果我尝试在任何其他视图控制器生命周期方法中覆盖特征集合,此 API 将不起作用。最初加载视图时如何覆盖 traitCollection?我尝试在viewDidLoad()
我的初始视图控制器的方法中使用相同的代码,但它没有效果。