iPad横向和纵向尺寸等级的不同布局

Har*_*las 24 iphone ipad uiinterfaceorientation ios size-classes

如何使用Size类设计具有不同布局的iPad横向和纵向屏幕.我只能找到两个方向的w-regular和h-regular.示例:我需要使用Size Class在纵向和横向上垂直对齐2个视图

cmi*_*mii 6

最后我找到了解决方案:

if traitCollection.verticalSizeClass == .Regular && traitCollection.horizontalSizeClass == .Regular {

     var orientation:UIInterfaceOrientation = UIApplication.sharedApplication().statusBarOrientation;
     if orientation == UIInterfaceOrientation.LandscapeLeft || orientation == UIInterfaceOrientation.LandscapeRight {
            // orientation is landscape


     }  else {
            // orientation is portrait

     }
}
Run Code Online (Sandbox Code Playgroud)


Ron*_*ond 6

看起来苹果打算将两种iPad方向都视为一样 - 但正如我们中的许多人所发现的那样,有非常合理的设计理由想要改变iPad Portrait与iPad Landscape的UI布局.

但是,请参阅此答案,了解另一种调整大小类以满足我们需求的方法:https: //stackoverflow.com/a/28268200/4517929


Ole*_*leg 5

对于Swift 3,它看起来像这样:

override func overrideTraitCollection(forChildViewController childViewController: UIViewController) -> UITraitCollection? {
    if UI_USER_INTERFACE_IDIOM() == .pad &&
        view.bounds.width > view.bounds.height {

        let collections = [UITraitCollection(horizontalSizeClass: .regular),
                           UITraitCollection(verticalSizeClass: .compact)]
        return UITraitCollection(traitsFrom: collections)

    }

    return super.overrideTraitCollection(forChildViewController: childViewController)
}
Run Code Online (Sandbox Code Playgroud)

在横向模式下,它将使用wRhC代替wRhR用于iPad设备.将此代码放入基本视图控制器,即此规则适用于此规则所呈现的所有控制器.您可以在此处添加任何其他条件...例如,如果您希望此规则仅适用于特定视图控制器,则if运算符将如下所示:

    if UI_USER_INTERFACE_IDIOM() == .pad &&
        childViewController is YourSpecificViewController &&
        view.bounds.width > view.bounds.height {

        let collections = [UITraitCollection(horizontalSizeClass: .regular),
                           UITraitCollection(verticalSizeClass: .compact)]
        return UITraitCollection(traitsFrom: collections)

    }
Run Code Online (Sandbox Code Playgroud)