Я нашел этот вопрос, и я попытался реализовать решение, которое было предоставлено. Однако я столкнулся с проблемой.
У моего контроллера начального представления есть два вида контейнеров, у которых есть свой собственный контроллер вида. Я создал контроллер корневого представления, который назначен контроллеру начального представления. Код в этом классе выглядит следующим образом.
class RootViewController: UIViewController {
var willTransitionToPortrait: Bool!
var traitCollection_CompactRegular: UITraitCollection!
var traitCollection_AnyAny: UITraitCollection!
override func viewDidLoad() {
super.viewDidLoad()
setupReferenceSizeClasses()
// Do any additional setup after loading the view.
}
override func viewWillAppear(animated: Bool) {
willTransitionToPortrait = self.view.frame.size.height > self.view.frame.size.width
}
override func viewWillTransitionToSize(size: CGSize, withTransitionCoordinator coordinator: UIViewControllerTransitionCoordinator) {
willTransitionToPortrait = size.height > size.width
}
func setupReferenceSizeClasses(){
let traitCollection_hCompact = UITraitCollection(horizontalSizeClass: .Compact)
let traitCollection_vRegular = UITraitCollection(verticalSizeClass: .Regular)
traitCollection_CompactRegular = UITraitCollection(traitsFromCollections: [traitCollection_hCompact, traitCollection_vRegular])
let traitCollection_hAny = UITraitCollection(horizontalSizeClass: .Unspecified)
let traitCollection_vAny = UITraitCollection(verticalSizeClass: .Unspecified)
traitCollection_AnyAny = UITraitCollection(traitsFromCollections: [traitCollection_hAny, traitCollection_vAny])
}
override func overrideTraitCollectionForChildViewController(childViewController: UIViewController) -> UITraitCollection? {
let traitCollectionForOverride = ((willTransitionToPortrait) != nil) ? traitCollection_CompactRegular : traitCollection_AnyAny
return traitCollectionForOverride;
}
Однако, когда я запускаю его, класс размера не будет отвечать так, как должен. Один из контроллеров просмотра контейнеров начнет действовать странно в ландшафтном и портретном режимах, как показано ниже.
Когда я не назначу rootviewcontroller, это будет выглядеть так
Пока он выглядит в портретном режиме
Кто-нибудь знает, что здесь может быть неправильным? Почему он не меняет класс размера, как хотелось бы.
ИЗМЕНИТЬ Как @Muhammad Yawar Ali спросили здесь скриншоты с позиции всех классов размера, которые я установил. У меня нет предупреждений или ошибок о любых ограничениях, поэтому эти скриншоты содержат обновленные представления.
Надеюсь, это показывает все, что нужно.
EDIT: по какой-то причине я не могу поставить все скриншоты