多个视图的Swift UIInterfaceOrientation

时间:2014-09-14 20:18:45

标签: ios orientation

我有一个包含多个视图的导航控制器。大多数视图都是纵向的,因此我将以下代码放在导航视图控制器中将其锁定为纵向视图

override func shouldAutorotate() -> Bool {
    return false
}

override func supportedInterfaceOrientations() -> Int {
    return UIInterfaceOrientation.Portrait.toRaw()
}

这很好用,并以纵向锁定我的所有视图。但是,这是一个只需要在Landscape中的视图。如果我使用上面的代码,它会将我的横向视图锁定为纵向模式,从而切断大部分视图。

任何人都可以帮我解决在横向视图控制器中使用的内容,以仅在横向上锁定此特定视图。

我正在使用它,但它不起作用。

override func supportedInterfaceOrientations() -> Int {
    return Int(UIInterfaceOrientationMask.Landscape.toRaw())
}

override func shouldAutorotate() -> Bool{
    // This method is the same for all the three custom ViewController
    return true
}

1 个答案:

答案 0 :(得分:0)

对于小型应用,我通常使用的解决方案是让导航控制器询问视图本身的旋转偏好:

override func supportedInterfaceOrientations() -> Int {
    return visibleViewController.supportedInterfaceOrientations()
}

override func shouldAutorotate() -> Bool {
    return visibleViewController.shouldAutorotate()
}

然后,在每个视图控制器中,您可以覆盖shouldAutorotate和supportedInterfaceOrientations,为每个控制器提供所需的行为。

另外一个技巧是,为了确保您的视图可以旋转回所需的旋转,您可以使用它来有条件地允许旋转回到肖像:

override func shouldAutorotate() -> Bool {
    return !UIInterfaceOrientationIsPortrait(self.interfaceOrientation)
}