2012-09-23 23 views
10

Mam aplikację, w której mam podklasę UINavigationController jako moją rootViewController. Mam UITableViewController, który pozwala użytkownikowi edytować niektóre ustawienia, powinien zawsze być w trybie portretu. Moja aplikacja musi również obsługiwać wszystkie inne orientacje po tym, jak popchnę komponent MoviePlayer na kontroler nawigacyjny.Problem z automatyczną rotacją systemu iOS 6 - obsługiwanaInterfaceOrientacje zwracana wartość nie jest przestrzegana

UITableViewController podklasa ma tę realizację supportedInterfaceOrientations:

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

Polecenie rejestrowanie mówi mi, że to zostanie właściwie nazywa.

Problem polega na tym, że zwracana wartość nie jest przestrzegana, tzn. Po włączeniu urządzenia ekran zmienia orientację poziomą.

Co mogę zrobić, aby widok ustawień zawsze pokazywał się w pionie, ale zezwalał na zmiany orientacji w przeglądarce wideo?

Więcej informacji: moja podklasa UINavigationController nie zastępuje wartościAutoruj lub wspierajInterfejsOrientacje. I nie wdrożyły

- (NSUInteger)application:(UIApplication *)application 

supportedInterfaceOrientationsForWindow:(UIWindow *)window 

metoda w moim AppDelegate i mam włączone wszystkie kierunki w podsumowaniu docelowej.

Odpowiedz

17

Mam problem, że niektóre w stosie nawigacyjnym obsługuje wszystkie orientacje, niektóre tylko portret, ale kontroler UINavigation zwrócił wszystkie obsługiwane orientacje aplikacji, ten mały hack pomógł mi.

@implementation UINavigationController (iOS6OrientationFix) 

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

@end 
+0

Jest to zdecydowanie twórcze rozwiązanie, ale nie mogę uwierzyć, że to jest to, czego oczekuje od nas Jabłko robić. Mam problem ze zrozumieniem ich nowego schematu autorotacji. Mówią najlepsze reguły ViewController na pełnym ekranie. Ale, jak wskazujesz, górny pełnoekranowy ViewController jest w wielu przypadkach kontrolerem NavigationController. Czy powinniśmy następnie dokonać jego podklasy lub utworzyć kategorię do wdrożenia komunikatu supportedInterfaceOrientations? Nie czuje się dobrze. – eddy

+0

To też nie jest dobre dla mnie, może to tylko błąd w implementacji Apple. – Mindaugas

+0

To nie działa dla mnie. Próbowałem również podklasowania, ponieważ Kategorie nie zapewniają zastąpienia metody :( – Pacu

2

Należy również dodać:

- (BOOL)shouldAutorotate { 
    return NO; 
} 

i ustawić obroty obsługiwane za głównego kontrolera widoku w pliku app plist tylko portrait.

2

Kategoria dla UINavigationController nie działa dla mnie. Nie wiem dlaczego. I rozwiązać mój problem z takiej kategorii 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