2016-04-13 9 views
4

I eine Root-View-Controller haben, der alle anderen Controller im Inneren der verwaltet, so dass ich overrode shouldAutorotate und supportedInterfaceOrientations in dem RootViewController wie folgt aus:StatusBar Ankleben nicht auf die Orientierung der App und Drehen

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 
} 

My app Porträt ist nur für das Anzeigen von Vollbildvideos mit AVPlayerViewController.

Der obige Code funktioniert über die gesamte App groß. Alle meine Controller und ihre Ansichten bleiben im Hochformat und wenn ein Benutzer einen Video-Vollbildschirm nimmt, dreht er sich ohne Probleme in die Landschaft.

Mein Problem ist, dass die Statusleiste im Portrait-Modus nicht auf die Orientierung Maske anhaftet und dreht auf Landschaft, aber in der Statusleiste wird dann in der Landschaft versteckt. Die andere seltsame Sache ist, dass, wenn sich die App in der Landschaft befindet, das Kontrollzentrum und das Benachrichtigungszentrum jetzt geöffnet werden können, als ob die App im Querformat wäre.

Min unterstützt iOS 9.0 ist. Irgendwelche Vorschläge?

Antwort

3

landete ich den obigen Code in meinem root-View-Controller zu entfernen und das Hinzufügen dieser in meine AppDelegate. Statusleiste bleibt jetzt stehen.

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

Nicht sicher, warum, aber 'Fenster', das Funktionsparameter ist, war in meinem Fall Null. Ich greife also auf 'UIApplication' window -Eigenschaft mit' self.window' zu –

Verwandte Themen