10 Stimmen

IOS 6 Automatische Drehungsfrage - Der Rückgabewert von supportedInterfaceOrientations wird nicht respektiert

Ich habe eine App, in der ich eine UINavigationController-Unterklasse als meinen rootViewController habe. Ich habe eine UITableViewController, mit der der Benutzer einige Einstellungen bearbeiten kann, die immer im Hochformat sein soll. Meine App muss auch alle anderen Ausrichtungen unterstützen, nachdem ich einen MoviePlayer-Komponenten auf den Navigationscontroller geschoben habe.

Die UITableViewController-Unterklasse hat diese Implementierung von supportedInterfaceOrientations:

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

Der Protokollierungsbefehl sagt mir, dass dies tatsächlich aufgerufen wird.

Das Problem ist, dass der Rückgabewert nicht beachtet wird, d.h. der Bildschirm wechselt in die Querformat-Orientierung, wenn ich das Gerät drehe.

Was kann ich tun, um sicherzustellen, dass die Einstellungsansicht immer im Hochformat angezeigt wird, aber Änderungen der Ausrichtung für den Videobetrachter zulässt?

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

   - (NSUInteger)application:(UIApplication *)application 

supportedInterfaceOrientationsForWindow:(UIWindow *)window

in meinem AppDelegate nicht implementiert und ich habe alle Ausrichtungen in der Zieldarstellung aktiviert.

17voto

Mindaugas Punkte 1657

Ich hatte das Problem, dass einige ViewControllers im Navigation-Stack alle Ausrichtungen unterstützen, einige nur im Hochformat, aber der UINavigation-Controller alle vom der App unterstützten Ausrichtungen zurückgab. Dieser kleine Hack hat mir geholfen.

@implementation UINavigationController (iOS6OrientationFix)

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

@end

2voto

Sverrisson Punkte 17469

Sie müssen auch hinzufügen:

- (BOOL)shouldAutorotate {
    return NO;
}

und die unterstützten Drehungen für den root View-Controller in der App-Plattdatendatei auf nur Portrait setzen.

2voto

Gleb Tarasov Punkte 845

Kategorie für UINavigationController funktioniert für mich nicht. Ich weiß nicht warum. Ich löse mein Problem mit der 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

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