¿iOS 6.0 restringe la rotation automática dentro de un controller de navigation?

¿Que más deberia hacer?

-(BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation) toInterfaceOrientation { return (toInterfaceOrientation == UIInterfaceOrientationPortrait); } - (NSUInteger)supportedInterfaceOrientations { return UIInterfaceOrientationMaskPortrait; } -(BOOL)shouldAutoRotate { return NO; } 

Mi viewController sigue girando.


Está embedded en una stack de navigation. Si subclasss UINavigationController e implemento las mismas templates de retratos allí, e incruste mi viewController en ese tweaked navigationController, de lo que funciona, pero no tengo intención de reescribir mi código en todas partes donde aparece un UINavigationController.

¿Cuál es la mejor práctica aquí?

RESPUESTA ORIGINAL: No es necesario subclass: simplemente haz una categoría como la que describí en mi solución aquí: la orientación vertical del button de inicio en el simulador iOS6 no funciona

Básicamente, para iPhone, el UINavigationController permite la rotation de todo, excepto el "retrato de button de inicio superior", para iPad, lo permite todo.

Entonces o hace una categoría reenviando la decisión al controller de vista actualmente activo o algo estático como

UINavigationController-Rotation.h:

 @interface UINavigationController (Rotation) @end 

UINavigationController-Rotation.m:

 #import "UINavigationController-Rotation.h" @implementation UINavigationController (Rotation) #pragma From UINavigationController - (BOOL)shouldAutorotate { return NO; } - (NSUInteger)supportedInterfaceOrientations { return UIInterfaceOrientationMaskPortrait; } #pragma - @end 

ACTUALIZACIÓN: como señaló Javier Soto, esto podría conducir a un comportamiento indefinido si hay una segunda categoría haciendo lo mismo. En ese caso, la subsorting podría ser una mejor solución.

En una situación donde usted sabe que no hay otra categoría que haga lo mismo, todavía considero que esto es una solución práctica, de bajo esfuerzo, local y pragmática. No soy religioso al respecto. Decidete a ti mismo.

Debe henetworkingar de UINavigationController y usar su personalizado en todas partes. No es tanto trabajo (basta con search las apariciones de UINavigationController en su código). Esto resultará mucho más flexible porque podrá personalizar otras cosas si es necesario.

NUNCA lo haga en una categoría que anule los methods en la class principal como sugiere otra respuesta.