iOS 中支持 Horizo​​ntalSizeClass=.Regular 横向

gra*_*ago 5 uikit ios swift

我正在尝试构建一个应用程序,支持具有常规水平尺寸类别的 iOS 设备的纵向和横向方向,而其余设备仅支持纵向。

在撰写本文时,将是:仅限纵向(适用于除 6 Plus/6s Plus 之外的 iPhone)以及适用于 iPhone 6 Plus / 6s Plus 和 iPad 的纵向和横向。

这是本机邮件应用程序执行的类似行为。

除其他外,我还尝试过以下操作:

override func supportedInterfaceOrientations() -> UIInterfaceOrientationMask {

    return [.Portrait, .LandscapeLeft, .LandscapeRight]

}

override func shouldAutorotate() -> Bool {

    return (traitCollection.horizontalSizeClass == .Regular)

}
Run Code Online (Sandbox Code Playgroud)

然而,shouldAutororate 显然是在界面旋转之前调用的,因此这发生在 TraitCollection 更新之前。

那么,问题是,如何实现这一目标?我试图以尽可能干净的方式完成此任务,而无需显式引用 userInterfaceIdiom、屏幕尺寸等。

wj2*_*061 2

override var supportedInterfaceOrientations:UIInterfaceOrientationMask{

    return [.portrait, .landscapeLeft, .landscapeRight]

}

override var shouldAutorotate:Bool {

    return (traitCollection.horizontalSizeClass == .regular) || (traitCollection.displayScale > 2);

}
Run Code Online (Sandbox Code Playgroud)