不同大小类别的iPad纵向和横向模式与containerviews

我发现这个问题,我试图实现已经给出的解决scheme。 但是我遇到了一个问题。

我的初始视图控制器有两个容器视图都有自己的视图控制器。 我创build了一个分配给初始视图控制器的根视图控制器。 这个类中的代码看起来像这样。

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; } 

但是,当我运行它的大小类将不会像它应该的响应。 其中一个容器视图控制器将在横向和纵向模式下开始performance怪异,如下所示。

风景模式 肖像模式

当我不分配rootviewcontroller它看起来像这样 风景模式 肖像模式

而在肖像模式下它应该看起来像这样 人像模式应该如何看待

有人知道这里可能会出错吗? 为什么它不会像所希望的那样改变尺寸等级。

编辑像@穆罕默德Yawar阿里问这里是从我设置的所有大小类的位置截图。 我没有任何限制的警告或错误,所以这些屏幕截图包含更新的意见。

在这里输入图像说明 在这里输入图像说明

我希望这显示所需的一切。

编辑:出于某种原因,我无法把所有的截图

viewWillTransitionToSize你需要调用超级,将事件传递给下一个响应者(你的rootviewcontroller)…

 override func viewWillTransitionToSize(size: CGSize, withTransitionCoordinator coordinator: UIViewControllerTransitionCoordinator) { super.viewWillTransitionToSize(size, withTransitionCoordinator: coordinator) willTransitionToPortrait = size.height > size.width } 

我已经从存储库克隆你的代码: https : //github.com/MaikoHermans/sizeClasses.git和编辑的代码把下面的代码在你的控制器它将工作正常,不会影响你的devise在iPad中。 导入UIKit

 class RootViewController: UIViewController { override func viewDidLoad() { super.viewDidLoad() // Do any additional setup after loading the view. } override func overrideTraitCollectionForChildViewController(childViewController: UIViewController) -> UITraitCollection? { if view.bounds.width < view.bounds.height { return UITraitCollection(horizontalSizeClass: .Unspecified) } else { return UITraitCollection(horizontalSizeClass: .Regular) } } } 

你可以尝试使用这个代码,但有一个问题,我相信它不正确地更新特征的iPad和视图布局保持不变,但看起来不错。 我已经尝试了多种方式,但没有成功,但会更新我的答案。