App忽略supportedInterfaceOrientations

时间:2016-11-18 12:20:34

标签: ios swift

我有一个带有多个视图控制器的应用程序,其中大多数应该能够有任何方向,但需要一个在Portrait中。但是,应用程序忽略了我从supportedInterfaceOrientations()返回的值

我的代码:

UINavigationController subclass:

override func supportedInterfaceOrientations() -> UIInterfaceOrientationMask {
    if let topViewController = self.topViewController {
        return topViewController.supportedInterfaceOrientations()
    }

    return [.Landscape, .Portrait]
}

override func shouldAutorotate() -> Bool {
    if let topViewController = self.topViewController {
        return topViewController.shouldAutorotate()
    }

    return true
}


UIViewController subclass

override func supportedInterfaceOrientations() -> UIInterfaceOrientationMask {
    return .Portrait
}

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

当我在景观兼容的视图控制器中并转到应该是纵向的视图控制器时,没有任何反应 - 应用程序不会自动旋转到肖像。

我也从info.plist中删除了支持的界面方向。有什么想法吗?

1 个答案:

答案 0 :(得分:1)

您可以在AppDelegate.swift内设置此功能

func application(application: UIApplication, supportedInterfaceOrientationsForWindow window: UIWindow) -> Int {

    return checkOrientationForVC(self.window?.rootViewController?)

}

在这个功能中,您可以执行以下操作:

   func checkOrientationForVC(viewController:UIViewController?)-> Int{

    if(viewController == nil){

        return Int(UIInterfaceOrientationMask.All.rawValue)//All means all orientation

    }else if (viewController is SignInViewController){ //Your View controller here

        return Int(UIInterfaceOrientationMask.Portrait.rawValue)

    }else{

        return checkOrientationForVC(viewController!.presentedViewController?)
    }
}

在“方向”中的“模拟指标”下也可以在故事板中设置方向。您还可以看到Stackoverflow's post.