Ho bisogno che la mia app sia compatibile su iPad e iPhone. Ha un tabbarController come rootViewController.Supporto dell'app universale con orientamento verticale su iPhone e Orizzontale + Ritratto su iPad
In iPad ho bisogno che sia disponibile sia in orizzontale che in verticale. In iPhone, tuttavia, ho bisogno che il rootView sia Portrait e io ho alcuni viewControllers, che vengono presentati sul tabbarController, che devono essere disponibili sia in landscape che in Portrait (ad esempio un viewController utilizzato per riprodurre video da Youtube). Quindi sto bloccando la rotazione del tabbarController come segue (nella sottoclasse UITabbarController).
# pragma mark - UIRotation Methods
- (BOOL)shouldAutorotate{
return (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad);
}
- (NSUInteger)supportedInterfaceOrientations{
return (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) ? UIInterfaceOrientationMaskAll : UIInterfaceOrientationMaskPortrait;
}
Quello che intendo fare è che bloccando la rotazione del RootViewController (tabbarController), sto bloccaggio tutto il VC nel tabbarController (solo su iPhone) e viste che sono presentati in cima alla tabbarController può ruotare secondo l'orientamento del dispositivo.
IL PROBLEMA
Tutto funziona come previsto fino a quando l'applicazione viene avviata nel paesaggio in iPhone. Quando viene avviato in modalità orizzontale, l'app si imposta automaticamente in orizzontale e avvia l'app in modalità orizzontale che non è destinata. Dovrebbe essere avviato in modalità Ritratto stesso anche se l'orientamento del dispositivo è Orizzontale. Dal momento che sto disattivando la rotazione automatica per iPhone, l'app continua a trovarsi nel paesaggio stesso causando un bug. Ho provato questo metodo per forzare l'applicazione per lanciare nel ritratto nell'applicazione: didFinishLaunchingWithOptions:
#pragma mark - Rotation Lock (iPhone)
- (void)configurePortraitOnlyIfDeviceIsiPhone{
if ((UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone))
[[UIApplication sharedApplication] setStatusBarOrientation:UIInterfaceOrientationPortrait];
}
Ancora il problema persiste. Ho autorizzato tutte le opzioni di orientamento su info.plist per la chiave SupportedInterfaceOrientaions sia per iPad che per iPhone poiché ho bisogno che l'app sia in orizzontale per iPhone anche se solo per alcuni viewControllers. Il problema può essere risolto se riesco in qualche modo a forzare l'avvio dell'app in Orientamento verticale anche se l'orientamento del dispositivo è Orizzontale. Per favore correggimi se sbaglio nella logica, in caso contrario, sarà apprezzato qualsiasi aiuto per rendere l'avvio dell'app in modalità ritratto.
Sono già passato attraverso this question here e here, ma non è riuscito a farlo funzionare ancora.
Thank You
Buona comprensione, lo implementerò. Grazie, stavo cercando questo tipo di soluzione, che possiamo implementare in AppDelegate e non è necessario scrivere in tutti i controller di visualizzazione. –