2012-09-23 8 views
10

Ich habe eine App, wo ich eine UINavigationController Unterklasse als meine rootViewController habe. Ich habe eine UITableViewController, die der Benutzer einige Einstellungen bearbeiten kann, sollte es immer im Hochformat sein. Meine App muss auch alle anderen Orientierungen unterstützen, nachdem ich eine MoviePlayer-Komponente auf den Navigationscontroller geschoben habe.iOS 6 Auto Rotation Problem - supportedInterfaceOrientations Rückgabewert nicht respektiert

Die UITableViewController Unterklasse hat diese Implementierung von supportedInterfaceOrientations:

- (NSUInteger)supportedInterfaceOrientations { 
    LLog(); 
    return UIInterfaceOrientationMaskPortrait; 
} 

Die Logging-Befehl sagt mir, dass dies tatsächlich aufgerufen wird.

Das Problem ist, dass der Rückgabewert nicht respektiert wird, d. H. Der Bildschirm wird in Querformat gedreht, wenn ich das Gerät drehe.

Was kann ich tun, damit die Einstellungsansicht immer im Hochformat angezeigt wird, aber Änderungen der Ausrichtung für den Video Viewer möglich sind?

Weitere Informationen: Meine UINavigationController Unterklasse überschreibt shouldAutorotate oder supportedInterfaceOrientations nicht. Ich habe nicht

umgesetzt
- (NSUInteger)application:(UIApplication *)application 

supportedInterfaceOrientationsForWindow:(UIWindow *)window 

Methode in meinem AppDelegate und ich habe alle Orientierungen in der Ziel Zusammenfassung aktiviert.

Antwort

17

Ich hatte das Problem, dass einige ViewControllers in der Navigation Stapel alle Orientierungen, einige nur Porträt, aber UINavigation Controller war alle App unterstützt Orientierungen zurück, dieser kleine Hack hat mir geholfen.

@implementation UINavigationController (iOS6OrientationFix) 

-(NSUInteger) supportedInterfaceOrientations { 
    return [self.topViewController supportedInterfaceOrientations]; 
} 

@end 
+0

Dies ist definitiv eine kreative Lösung, aber ich kann nicht glauben, dass dies, was Apple erwartet, dass wir tun. Ich habe Probleme, ihr neues Autorotationsschema zu verstehen. Sie sagen die obersten ViewController-Regeln im Vollbildmodus. Aber, wie Sie darauf hinweisen, ist der oberste Vollbild-ViewController in vielen Fällen der NavigationController. Müssen wir dann eine Unterklasse erstellen oder eine Kategorie erstellen, um die supportedInterfaceOrientations-Nachricht zu implementieren? Fühlt sich nicht richtig an. – eddy

+0

Es fühlt sich auch nicht richtig an, vielleicht ist es nur ein Fehler in der Apple-Implementierung. – Mindaugas

+0

Dies funktioniert nicht für mich. Ich habe versucht Subclassing als auch Kategorien nicht sicherstellen Methode Override :( – Pacu

2

Sie müssen auch hinzufügen:

- (BOOL)shouldAutorotate { 
    return NO; 
} 

und legen Sie die unterstützten Rotationen für die Wurzel View-Controller in der App plist-Datei nur portrait.

2

Kategorie für UINavigationController nicht für mich arbeiten. Ich weiß nicht warum. Ich löse mein Problem mit einer solchen Kategorie von UIViewController:

@implementation UIViewController (Orientation) 

- (BOOL) shouldAutorotate 
{ 
    return YES; 
} 


- (NSUInteger)supportedInterfaceOrientations 
{ 
    NSUInteger orientations = UIInterfaceOrientationMaskPortrait; 

    if ([self isKindOfClass:[PlayerViewController class]]) 
    { 

     orientations |= UIInterfaceOrientationMaskLandscapeLeft; 
     orientations |= UIInterfaceOrientationMaskLandscapeRight; 

    } 

    return orientations; 
} 

@end