0

Ich habe 2 View Controller, VC1 und VC2.So sperren Sie die Ausrichtung für das iPhone für bestimmte View Controller - Swift?

VC1 präsentiert derzeit VC2 modal.

VC1 nur Orientierung sollte im Hochformat sein, aber VC2 kann alle Orientierungen haben.

Das Problem ist, wenn ich in VC2 bin und ich in Querformat drehen und dann entlassen, VC1 ist auch im Querformat-Modus! Das sollte nie passieren!

HINWEIS: Es gibt keine Navigation Controller oder UITabBarController

ich meinen Code unten hinzufügen.

Appdelagate:

func application(_ application: UIApplication, supportedInterfaceOrientationsFor window: UIWindow?) -> UIInterfaceOrientationMask { 
    if let rootViewController = self.topViewControllerWithRootViewController(rootViewController: window?.rootViewController) { 
     if (rootViewController.responds(to: Selector(("canRotate")))) { 
      // Unlock landscape view orientations for this view controller 
      return .allButUpsideDown 
     } 
    } 

    // Only allow portrait (standard behaviour) 
    return .portrait; 
} 

private func topViewControllerWithRootViewController(rootViewController: UIViewController!) -> UIViewController? { 
    if (rootViewController == nil) { return nil } 
    if (rootViewController.isKind(of: (UITabBarController).self)) { 
     return topViewControllerWithRootViewController(rootViewController: (rootViewController as! UITabBarController).selectedViewController) 
    } else if (rootViewController.isKind(of:(UINavigationController).self)) { 
     return topViewControllerWithRootViewController(rootViewController: (rootViewController as! UINavigationController).visibleViewController) 
    } else if (rootViewController.presentedViewController != nil) { 
     return topViewControllerWithRootViewController(rootViewController: rootViewController.presentedViewController) 
    } 
    return rootViewController 
} 

-Code in VC2:

override func viewDidLoad() { 
     super.viewDidLoad() 
     UIDevice.current.setValue(Int(UIInterfaceOrientation.portrait.rawValue), forKey: "orientation") 
} 

func canRotate() -> Void {} 

Link, wo ich um Hilfe ging und fand diesen Code Website where I found Code

Vielen Dank für die Hilfe!

+0

Sie machen das alles falsch. Wo sind Ihre Implementierungen von ['supportedInterfaceOrientations'] (https://developer.apple.com/reference/uikit/uiviewcontroller/1621435-supportedinterfaceorientations)? Beide View-Controller müssen einen haben. – matt

+0

Ich habe das zur Zeit nicht irgendwo, weil ich es versucht habe und es scheint nicht auf iOS 10 zu arbeiten? Kannst du bitte ein wenig näher ausführen? Sehr neu dazu! Ich habe einen Link zu der Frage hinzugefügt, die zeigt, wo ich diesen Code gefunden habe – user7097242

+0

'supportedInterfaceOrientations' war der bevorzugte Mechanismus für die Handhabung der Geräte-Rotation seit iOS 6 oder so. Sie erwähnen nicht, wie VC1 präsentiert wird, aber es scheint wahrscheinlich, dass es diese Methode überschreiben sollte, um die Rotation zu steuern. –

Antwort

5

Sie müssen die folgenden Schritte folgen Rotation für bestimmte Viewcontrollers sperren: -

Step 1: Während Ihr Projekt erstellen, damit alle die Orientierungen. Wählen Sie in der folgenden Abbildung nichts aus. enter image description here Step 2: Wenn Sie VC1 möchten hinzufügen, die Umsetzung nur Portrait Orientierung haben dann die folgenden zwei Funktionen in Ihrem Viewcontroller Klasse

override var supportedInterfaceOrientations: UIInterfaceOrientationMask { 
     return UIInterfaceOrientationMask.all //return the value as per the required orientation 
    } 

override var shouldAutorotate: Bool { 
     return false 
    } 

Step 3: Wenn Sie VC2 wollen alle dann die Orientierung haben, fügen Sie keinen Code für sie .

So die Schlussfolgerung: -

In Projekteinstellung erlauben alle Orientierungen für ganze Projekt. Die Einschränkung sollte auf ViewControllers-Ebene und nicht auf Projektebene erfolgen.

Wenn Sie möchten, dass VC alle Ausrichtung haben, dann schreiben Sie keinen Code.

Wenn Sie wünschen, dass VC eine bestimmte Ausrichtung hat, implementieren Sie zwei Funktionen oben.

+0

Danke für die Hilfe! In Schritt 1) ​​sollte nicht alles ausgewählt werden, um alle Orientierungen zu ermöglichen? – user7097242

+0

Wenn Sie nichts auswählen, wird standardmäßig die gesamte Ausrichtung ausgewählt. –

+0

@ user7097242 Ich hoffe es hat geholfen, Bitte akzeptieren Sie die Antwort, wenn es für Sie funktioniert. Prost! –

Verwandte Themen