В моем начальном контроллере представления у меня есть UITabbarController
в качестве дочернего контроллера представления.
Я хочу, чтобы UITabbarController
отображал свой UITabbar
с traitCollection, имеющим horizontalSizeClass of Compact, чтобы на панели вкладок изображение и заголовок отображались вертикально, а не рядом.
Переопределение геттера traitCollection UITabbarController теперь не поддерживается в iOS13, Xcode выдает предупреждение ниже.
override var traitCollection: UITraitCollection{
let current = super.traitCollection
let compact = UITraitCollection(horizontalSizeClass: .compact)
return UITraitCollection(traitsFrom: [current, compact])
}
Класс MyTabbarController переопределяет метод получения -traitCollection, который не поддерживается. Если вы пытаетесь переопределить черты, вы должны использовать соответствующий API.
После исследования соответствующего API я нашел
open func setOverrideTraitCollection(_ collection: UITraitCollection?, forChild childViewController: UIViewController)
После реализации этого я могу переопределить коллекцию признаков myTabbarController, но только после того, как представление изменило ориентацию. Этот API работает только в том случае, если я переопределяю метод viewWillTransition.
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()
моего начального контроллера представления, но это не дало никакого эффекта.