import UIKit
class NavigationControllerWithTraitOverride: UINavigationController {
// If you make a navigationController a member of this class the descendentVCs of that navigationController will have their trait collection overridden with compact vertical size class if the user is on an iPad and the device is horizontal.
override func overrideTraitCollection(forChildViewController childViewController: UIViewController) -> UITraitCollection? {
if UIDevice.current.userInterfaceIdiom == .pad && UIDevice.current.orientation.isLandscape {
return UITraitCollection(traitsFrom:[UITraitCollection(verticalSizeClass: .compact), UITraitCollection(horizontalSizeClass: .regular)])
}
return super.overrideTraitCollection(forChildViewController: childViewController)
}
}
4 回答
最后我找到了解决方案:
看起来苹果打算将两种iPad方向都视为一样 - 但正如我们中的许多人所发现的那样,有非常合理的设计理由想要改变iPad Portrait与iPad Landscape的UI布局 .
但是,请参阅此答案,了解另一种调整大小类以满足我们需求的方法:https://stackoverflow.com/a/28268200/4517929
对于 Swift 3 ,它看起来像这样:
在横向模式下,它将使用 wRhC 而不是 wRhR 用于iPad设备 . 将此代码放入基本视图控制器,即此规则适用于此规则所呈现的所有控制器 . 您可以在此处添加任何其他条件...例如,如果您希望此规则仅适用于特定视图控制器,则 if 运算符将如下所示:
Swift 4
我喜欢创建navigationController的自定义子类,然后将故事板初始导航控制器设置为该类 . 您也可以使用a ViewController执行类似的操作 .
例:
注意:您不应该根据docs覆盖traitCollection