多个视图的 Swift UIInterfaceOrientation

Posted

技术标签:

【中文标题】多个视图的 Swift UIInterfaceOrientation【英文标题】:Swift UIInterfaceOrientation for Multiple views 【发布时间】:2014-09-14 20:18:45 【问题描述】:

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

override func shouldAutorotate() -> Bool 
    return false


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

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

谁能帮我解决在横向视图控制器中使用什么来仅将这个特定视图锁定在横向中。

我在用这个,但它不起作用。

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】:

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

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


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

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

还有一个技巧,为了确保您的视图可以旋转回所需的旋转,您可以使用它来有条件地允许旋转回纵向:

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

【讨论】:

以上是关于多个视图的 Swift UIInterfaceOrientation的主要内容,如果未能解决你的问题,请参考以下文章

Swift:在视图之间传递多个值

多个视图的 Swift UIInterfaceOrientation

多个分页滚动视图 - Swift

(Swift)当多个视图控制器导致相同的视图时展开 segue?

Swift:SwiftUI 视图的多个条件的内联评估

在集合视图单元格 Swift 中管理多个进度视图