2016-03-10 84 views
3

iPad的纵向和横向模式我发现this的问题,我一直试图贯彻我们已经给出了解决方案。但是我遇到了一个问题。不同尺寸大小与containerviews

我的初始视图控制器有两个谁都有自己的视图控制器配备了两个集装箱的意见。我创建了一个分配给初始视图控制器的根视图控制器。这个类中的代码看起来像这样。

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

但是,当我运行它时,size类不会像它应该那样响应。其中一个容器视图控制器在横向和纵向模式下都会出现怪异现象,如下所示。

landscape mode portrait mode

当我不分配RootViewController的它看起来就像这样 landscape mode portrait mode

虽然它看起来应该像这样在纵向模式下 portrait mode how it should look

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

编辑 像@穆罕默德Yawar阿里问这里是从我设置的所有大小类的位置截图。我对任何约束都没有警告或错误,因此这些屏幕截图包含更新的视图。

enter image description here enter image description here

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

编辑: 由于某种原因,我不能把所有的截图

回答

2

viewWillTransitionToSize你也需要超级调用,该事件传递到下一个响应者(你RootViewController的)...

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

我应用了超不过遗憾的事情我 – NoSixties

-1

我已经克隆你的代码库:https://github.com/MaikoHermans/sizeClasses.git 的和编辑的代码把下面的代码在你控制器它会正常工作&不会影响的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和视图布局保持不变,但看起来很不错。我尝试了多种方式,但没有成功,但会更新我的答案。

+0

已在所有需要的方向施加的限制并没有改变。当我在任何iPhone设备上运行它们时,它们的工作方式都与它们应该一样它不适用于任何iPad设备 – NoSixties

+0

@NoSixties您能否确认您在应用哪些尺寸限制?要使约束适用于所有设备,必须将它们应用于wAny * hAny基本值维度。为了使设计在多个设备上工作,您必须在多个维度中添加约束条件。 –

+0

看看我刚​​刚做的编辑。我已经更改了所有尺寸类别,但是由于某些原因,我试图放置所有屏幕截图,但我无法发布更多截图,然后它现在有 – NoSixties