2012-09-23 11 views
10

Ho un'app in cui ho una sottoclasse UINavigationController come mia rootViewController. Ho un UITableViewController che consente all'utente di modificare alcune impostazioni, dovrebbe sempre essere in modalità verticale. La mia app deve anche supportare tutti gli altri orientamenti dopo che ho spinto un componente MoviePlayer sul controller di navigazione.Problema di rotazione automatica iOS 6 - supportatoInterfaceOrientations valore restituito non rispettato

Il UITableViewController sottoclasse ha questa implementazione di supportedInterfaceOrientations:

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

Il comando di registrazione mi dice che questo venga effettivamente chiamato.

Il problema è che il valore restituito non viene rispettato, ovvero quando lo schermo si trasforma in orientamento orizzontale quando si accende il dispositivo.

Cosa posso fare per rendere la visualizzazione delle impostazioni sempre visualizzata in verticale ma consentire modifiche di orientamento per il visualizzatore video?

Altre informazioni: la sottoclasse UINavigationController non esegue l'override di shouldAutorotate o supportatoInterfaceOrientations. Non ho implementato

- (NSUInteger)application:(UIApplication *)application 

supportedInterfaceOrientationsForWindow:(UIWindow *)window 

metodo nella mia AppDelegate e ho permesso a tutti gli orientamenti nel riassunto di destinazione.

risposta

17

Ho riscontrato che alcuni ViewControllers nello stack di spostamento supportano tutti gli orientamenti, alcuni solo di ritratto, ma il controller UINavigation restituiva tutti gli orientamenti supportati dall'app, questo piccolo hack mi ha aiutato.

@implementation UINavigationController (iOS6OrientationFix) 

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

@end 
+0

Questo è sicuramente una soluzione creativa ma non posso credere che questo è ciò che Apple si aspetta che facciamo. Ho difficoltà a capire il loro nuovo schema di autorotazione. Dicono le regole ViewController a schermo intero. Ma, come stai sottolineando, il ViewController in alto a schermo intero è in molti casi il NavigationController. Dovremmo quindi creare una sottoclasse o creare una categoria per implementare il messaggio SupportInterfaceOrientations? Non mi sembra giusto. – eddy

+0

Non mi sembra giusto, forse è solo un bug nell'implementazione di Apple. – Mindaugas

+0

Questo non funziona per me. Ho provato anche la sottoclasse: le categorie non garantiscono l'override del metodo :( – Pacu

2

è inoltre necessario aggiungere:

- (BOOL)shouldAutorotate { 
    return NO; 
} 

e impostare le rotazioni supportati per la radice View Controller nel file plist applicazione solo portrait.

2

categoria per UINavigationController non funziona per me. Non so perché. Ho risolvere il mio problema con tale categoria di 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 
Problemi correlati