8

Ich habe einen UITabBarController im Hochformat vorgestellt. Auf einer der Registerkarten habe ich eine Schaltfläche, die einen UIViewController modal anzeigt (Ein einfacher Storyboard-Übergang führt die Aktion aus).Modal View Controller Force Querformat in iOS 6

Ich möchte, dass diese modale Ansicht im Landscape-Modus angezeigt wird, aber ich kann es nicht automatisch drehen.

Ich habe dies in der modal Ansichten Controller

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

Ich habe landscapeLeft auf die .plist unterstützt Orientierungen hinzugefügt (obwohl dies ermöglicht auch die TabBar gedreht werden, was ich nicht will)

ich habe auch

[UIApplication sharedApplication].statusBarOrientation = UIInterfaceOrientationLandscapeLeft; 

dies den ViewDidLoad der modalen Ansicht hinzugefügt, aber ich kann es einfach nicht von selbst zu drehen bekommen.

Dank

EDIT ----

Es shouldAutoRotate scheint genannt nicht einmal wird!

Auch ich versuche, 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 schlecht. Ich denke, ich hätte erwähnen sollen, dass ich iOS 6 benutze. Das Display rotiert automatisch auf iOS 5. shouldAutorotateToInterfaceOrientation ist veraltet, also muss ich über die neuen Methoden nachlesen.

+0

aus meinen bisherigen Erfahrungen mit diesem gibt es keine Möglichkeit, eine ViewController in einer bestimmten Ausrichtung zu erzwingen. Sie können wählen, ob die Ausrichtung geändert werden soll oder nicht, aber nicht erzwingen. es war ein bummer für mich ... – KDaker

+0

Das ist ein bisschen dumm wirklich! Ich habe ein Diagramm, das nur in Landscape passt. Also sagst du Apple soll ich es zeigen, bis der Nutzer sein Gerät dreht. Das klingt nicht richtig, obwohl ich keine Lösung gefunden habe, damit Sie Recht haben. – Darren

Antwort

7

iOS 6.0 Release Notes
„Mehr Verantwortung für die App und die AppDelegate bewegt sich nun. , iOS-Container (wie UINavigationController) konsultieren nicht um ihre Kinder zu bestimmen, ob sie autorotate sollte. "

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

Es wurde eine Lösung mit Category verwendet, um eine Methode zur vorhandenen UINavigationController-Klasse hinzuzufügen.

innerhalb der shouldAutorotate Methode, können Sie in jedem View-Controller von self.viewControllers die Methode shaotAutorotate aufrufen. In der Tat können Sie zu Ihrem Kind View Controller übergeben.

0

ich 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} gesetzt; in Ihrem App-Delegierten. Ich hoffe, dass dies Ihr Problem ist

+0

Dies erzwingt immer noch nicht die Ausrichtung. Ich habe dies zu meinem AppDelegate self.window.rootViewController = [[UIStoryboard StoryboardWithName: @ "MainStoryboard" Bundle: [NSBundle mainBundle]] instanziateViewControllerWithIdentifier: @ "mainTab"]; – Darren

+0

ok bummer, ich verwende keine Storyboards in meinen Apps, obwohl ich nicht denken würde, dass dies zu diesem Problem führen sollte. Ich vermute, dass die rootViewController-Eigenschaft sowieso automatisch für Sie festgelegt wird. Es wäre interessant, Aufrufe von shootAutorotate zu protokollieren, um zu sehen, ob es überhaupt aufgerufen wird – CSmith

+0

Nein, shouldAutorotate wird überhaupt nicht aufgerufen! – Darren

1

In iOS 6 es diese Methode eine spezifische Ausrichtung auf iOS 6.

- (NSUInteger)supportedInterfaceOrientations { 
    return UIInterfaceOrientationMaskLandscape; 
} 

ich versuche immer noch, es zu bekommen zwingen kann helfen, zu sein scheint zu funktionieren und wird aktualisiert mit irgendwelchen Ergebnissen.

+0

Danke, es funktioniert in meinem Fall zusammen mit der Methode - (BOOL) shouldAutorotate {return NO;} – Alex

6

Wenn Sie in iOS6 zwingen Rotation wollen, sollten Sie Ihre RootViewController diese Methoden implementieren:

- (NSUInteger)supportedInterfaceOrientations { 
    return UIInterfaceOrientationMaskLandscape; 
} 

- (BOOL)shouldAutorotate { 
    return YES; 
} 
Verwandte Themen