Forzare l’orientamento verticale mentre si spinge da Landscape View Controller

Supporto app: iOS6 +

La mia app funziona sia in verticale che in orizzontale. Ma 1 controller dovrebbe funzionare solo in un ritratto.

Il problema è che quando sono in landscape e spingo il controller della vista, anche il nuovo viewcontroller è in landscape finché non lo ruoto in verticale. Quindi è bloccato nel ritratto come dovrebbe essere.

È ansible farlo apparire sempre in verticale? Anche se il genitore lo sta spingendo nel paesaggio?

Tutto il codice seguente non aiuta

    [[UIApplication sharedApplication] setStatusBarOrientation:UIInterfaceOrientationPortrait]; 

    E questo codice funziona fino a quando ea meno che non spingo dal paesaggio. Come forzare un UIViewController all’orientamento verticale in iOS 6

    Ho risolto questo aggiungendo le seguenti righe in ViewDidLoad

     UIViewController *c = [[UIViewController alloc]init]; [self presentViewController:c animated:NO completion:nil]; [self dismissViewControllerAnimated:NO completion:nil]; 

    Per prima cosa, devi creare una categoria:

    UINavigationController + Rotation_IOS6.h

     #import  @interface UINavigationController (Rotation_IOS6) @end 

    UINavigationController + Rotation_IOS6.m:

     #import "UINavigationController+Rotation_IOS6.h" @implementation UINavigationController (Rotation_IOS6) -(BOOL)shouldAutorotate { return [[self.viewControllers lastObject] shouldAutorotate]; } -(NSUInteger)supportedInterfaceOrientations { return [[self.viewControllers lastObject] supportedInterfaceOrientations]; } @end 

    Quindi, implementa questi metodi nella tua class che vuoi essere solo orizzontale:

     - (BOOL)shouldAutorotate { return YES; } - (NSUInteger)supportedInterfaceOrientations { return UIInterfaceOrientationMaskLandscape; } 

    Nel caso in cui si utilizzi un UITabBarController, è sufficiente sostituire UINavigationController per UITabBarController. Questa soluzione ha funzionato bene per me dopo una lunga ricerca! Ero nella stessa situazione come sei ora!

    MODIFICARE

    Quindi, ho visto il tuo campione. È necessario apportare alcune modifiche. 1 – Creare una nuova class per la categoria UINavigationController. Assegna un nome alla class UINavigationController + Rotation_IOS6 (.h and .m) 2 – Non è necessario implementare il metodo preferredInterfaceOrientationForPresentation . La tua categoria dovrebbe apparire così:

     #import "UINavigationController+Rotation_IOS6.h" @implementation UINavigationController (Rotation_IOS6) -(BOOL)shouldAutorotate { return [[self.viewControllers lastObject] shouldAutorotate]; } -(NSUInteger)supportedInterfaceOrientations { return [[self.viewControllers lastObject] supportedInterfaceOrientations]; } @end 

    3 – Nella class che vuoi ruotare solo in orizzontale, includilo nell’implementazione, esattamente come segue:

     // Rotation methods for iOS 6 - (BOOL)shouldAutorotate { return YES; } - (NSUInteger)supportedInterfaceOrientations { return UIInterfaceOrientationMaskLandscape; } 

    4 – Vorrei consigliare di includere anche il metodo di autorotazione per iOS 5 all’interno della class desiderata in landscape:

     - (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation { return UIInterfaceOrientationLandscapeLeft | UIInterfaceOrientationLandscapeRight; }