8 Stimmen

Modal View Controller erzwingen Querformatausrichtung in iOS 6

Ich habe ein UITabBarController im Hochformat dargestellt. Auf einer der Registerkarten habe ich eine Schaltfläche, die eine UIViewController modal zeigt (eine einfache Storyboard Segue führt die Aktion).

Ich möchte, dass diese modale Ansicht im Querformat angezeigt wird, aber ich kann nicht erreichen, dass sie sich automatisch dreht.

Ich habe dies in der modalen Ansichten Controller

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
    return (interfaceOrientation == UIInterfaceOrientationLandscapeLeft);
}

Ich habe landscapeLeft zu den .plist unterstützten Ausrichtungen hinzugefügt (obwohl dies auch die TabBar gedreht werden kann, die ich nicht möchte)

Ich habe auch dies in die ViewDidLoad der modalen Ansicht hinzugefügt

[UIApplication sharedApplication].statusBarOrientation = UIInterfaceOrientationLandscapeLeft;

aber ich kann sie nicht dazu bringen, sich von selbst zu drehen.

Danke

EDIT ----

Es scheint, dass shouldAutoRotate nicht einmal aufgerufen wird!

Außerdem versuche ich, die Ausrichtung zu erkennen, und dieser Code unten zeigt immer 2, unabhängig von der Ausrichtung!

if ([[UIDevice currentDevice] orientation] == UIInterfaceOrientationPortrait) {
        NSLog(@"1");
        self.hostView.frame = CGRectMake(0, 60, 200, 255);
    } else {
        NSLog(@"2");
        self.hostView.frame = CGRectMake(0, 45, 480, 255);
    }

EDIT 2 ---

Mein Fehler. Ich schätze, ich hätte erwähnen sollen, dass ich iOS 6 verwendet habe. Unter iOS 5 wird die Anzeige automatisch gedreht. shouldAutorotateToInterfaceOrientation ist veraltet, also muss ich mich über die neuen Methoden informieren.

7voto

Esmond Punkte 86

iOS 6.0 Versionshinweise
"Die Verantwortung wird immer mehr auf die App und den App-Beauftragten übertragen. Jetzt konsultieren iOS-Container (wie z. B. UINavigationController) ihre Kinder nicht, um zu bestimmen, ob sie autorotieren sollen. "

-(BOOL)shouldAutorotate von UIViewController unter einem beliebigen Container (wie UINavigationController) wird von IOS6 nicht aufgerufen.

Versucht eine Lösung mit der Verwendung von Kategorie, um Methode zu bestehenden UINavigationController Klasse hinzufügen.

innerhalb der shouldAutorotate Methode können Sie die shouldAutorotate-Methode in jedem View-Controller von self.viewControllers aufrufen. In der Tat können Sie an Ihren Child-View-Controller übergeben.

6voto

miham Punkte 395

Wenn Sie die Rotation in iOS6 erzwingen wollen, sollte Ihr rootviewController diese Methoden implementieren:

- (NSUInteger)supportedInterfaceOrientations {
    return UIInterfaceOrientationMaskLandscape;
}

- (BOOL)shouldAutorotate {
    return YES;
}

1voto

CoderDan Punkte 432

In iOS 6 scheint es so zu sein, dass diese Methode eine bestimmte Ausrichtung unter iOS 6 erzwingen kann.

- (NSUInteger)supportedInterfaceOrientations {
    return UIInterfaceOrientationMaskLandscape;
}

Ich versuche immer noch, es zum Laufen zu bringen, und werde über alle Ergebnisse berichten.

0voto

CSmith Punkte 13034

Ich tue genau dies in meiner App, und tun es über shouldAutoRotateToInterfaceOrientation, etwas anders als Sie:

- (BOOL) shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
 if (UIInterfaceOrientationIsLandscape(interfaceOrientation))
  return (YES);
 return (NO);
}

für iOS 6 müssen Sie auch window.rootViewController = {Ihr Root-View-Controller}; in Ihrem App-Delegat festlegen. Ich hoffe, dass dies Ihr Problem ist

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X