2012-10-08 15 views
6

da iOS6 ho grossi problemi con la rotazione. Ho implementato tutti i nuovi metodi di rotazione (shouldAutorotate, preferredInterfaceOrientationForPresentation, supportedInterfaceOrientation), ma tutte le visualizzazioni sono ancora in rotazione. La cosa divertente è che le visualizzazioni mantengono le loro dimensioni e il resto della finestra (in Landscape) è nero.ios 6 App sta ruotando, anche con shouldAutorotate: NO

Questo è il modo in cui lo implemento, c'è qualcosa di sbagliato?

#pragma mark - 
#pragma mark - InterfaceOrientation iOS 5 
//Deprecated in iOS 6 
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation 
{ 
    // Return YES for supported orientations 
    return (interfaceOrientation == UIInterfaceOrientationPortrait); 
} 

#pragma mark - 
#pragma mark - InterfaceOrientation iOS 6 

- (BOOL)shouldAutorotate{ 
    return NO; 
} 

- (UIInterfaceOrientation)preferredInterfaceOrientationForPresentation{ 
    return UIInterfaceOrientationPortrait; 
} 

- (NSUInteger)supportedInterfaceOrientations{ 
    return UIInterfaceOrientationMaskPortraitUpsideDown; 
} 

Grazie per il vostro aiuto, gente.

+0

Non dovrebbe essere quest'ultimo "UIInterfaceOrientationMaskPortrait'? –

+0

Va bene se ruota su entrambi gli orientamenti verticale, ma non deve ruotare sull'orientamento orizzontale – Fry

+2

Basta provare a cambiare il supporto di orientamento predefinito dell'app, ad esempio nel file plist sotto il tasto "Orientamento interfaccia supportato" selezionare solo due interfacce supportate. Questo risolverà il tuo problema :) –

risposta

9

ho risolto il problema facendo una categoria per il navigationController:

@implementation UINavigationController (iOS6fix) 

-(BOOL)shouldAutorotate 
{ 
    return [[self.viewControllers lastObject] shouldAutorotate]; 
} 

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

- (UIInterfaceOrientation)preferredInterfaceOrientationForPresentation 
{ 
    return [[self.viewControllers lastObject] preferredInterfaceOrientationForPresentation]; 
} 

@end 

Grazie a tutti per le risposte!

+0

Ho dovuto creare una sottoclasse di UINavigationController e ho usato object_setClass (.., ..) per impostare il mio navigationController su quella classe. Ho anche implementato questi 3 metodi. Meglio segna la tua risposta come la risposta accettata in modo che le persone possano vedere coz ci sembra essere un sacco di confusione e problemi in arrivo a causa di questo cambiamento – pnizzle

+0

Perfetto, grazie! – Fogmeister

+0

Ha funzionato come un fascino - grazie mille .. – geekyaleks

-1
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 
{ 
    //Make sure your window to assgin the view controller object to rootViewController, Please don't add controller view as a sub view on window. 
    self.window.rootViewController = viewController; 
} 
0

Anch'io ho ruotato, anche se lo spengo a NO.

due opzioni:

  1. accedere alle impostazioni progetto e modificare i possibili orientamenti

  2. rimuovere tutti i metodi per AutoRotate. Anche se sono impostati su NO, ruotano per me.

0

Ho usato la seguente categoria su UIViewController per avere orizzontale solo su iOS5 e 6. Forse aiuta qualcuno.

#import <UIKit/UIKit.h> 

@implementation UIViewController (iOS6fix) 

-(BOOL)shouldAutorotate 
{ 
    return YES; 
} 

-(NSUInteger)supportedInterfaceOrientations 
{ 
    return UIInterfaceOrientationMaskLandscape; 
} 

- (UIInterfaceOrientation)preferredInterfaceOrientationForPresentation 
{ 
    return UIInterfaceOrientationLandscapeLeft; 
} 

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation 
{ 
    // Return YES for supported orientations 
    return UIInterfaceOrientationIsLandscape(interfaceOrientation); 
} 

@end 
Problemi correlati