2016-04-13 9 views
4

を回転していない私はその中のすべての他のコントローラを管理し、ルートビューコントローラを持っているので、私はrootViewControllerはこのように言ったでshouldAutorotateとsupportedInterfaceOrientationsをオーバーライド:私のアプリは肖像画であるステータスバーはアプリの向きに付着し

public override func shouldAutorotate() -> Bool { 
    if let vc = view.window?.rootViewController?.presentedViewController { 
     if NSStringFromClass(vc.classForCoder) == "AVFullScreenViewController" { 
      return true 
     } 
    } 
    return false 
} 

public override func supportedInterfaceOrientations() -> UIInterfaceOrientationMask { 
    if let vc = view.window?.rootViewController?.presentedViewController { 
     if NSStringFromClass(vc.classForCoder) == "AVFullScreenViewController" { 
      return UIInterfaceOrientationMask.AllButUpsideDown 
     } 
    } 
    return UIInterfaceOrientationMask.Portrait 
} 

AVPlayerViewControllerを使用してフルスクリーンビデオを表示する場合を除いてのみ。

上記のコードはアプリ全体で大きく機能しています。私のコントローラとそのビューはすべて肖像画にとどまり、ユーザーがフルスクリーンのビデオを撮ると、問題なく風景に回転します。

私の問題は、ポートレートモードのステータスバーがオリエンテーションマスクを遵守しておらず、ランドスケープに回転していることですが、ステータスバーはランドスケープで隠されています。もう1つの奇妙なことは、アプリがランドスケープにあるときに、コントロール・センターと通知センターをアプリがランドスケープにあるかのように開いてスワイプできることです。

サポートされる最小iOSは9.0です。助言がありますか?

答えて

3

私はルートビューコントローラで上記のコードを削除し、これを私のアプリケーションデリゲートに追加しました。ステータスバーはそのままです。

func application(application: UIApplication, supportedInterfaceOrientationsForWindow window: UIWindow?) -> UIInterfaceOrientationMask { 
    if let vc = window?.rootViewController?.presentedViewController { 
     if NSStringFromClass(vc.classForCoder) == "AVFullScreenViewController" { 
      return UIInterfaceOrientationMask.AllButUpsideDown 
     } 
    } 
    return UIInterfaceOrientationMask.Portrait 
} 
+1

私の場合、なぜ関数パラメータである 'window'がnilであったのかわかりません。そこで、 'self.window'で' UIApplication'ウィンドウのプロパティにアクセスします –