Landscape xib aparece como retrato

Tengo un controller de vista y files de punta separados para retrato y paisaje. Al girar, carga la punta respectiva. Los methods

shouldAutorotateToInterfaceOrientation and willRotateToInterfaceOrientation 

se llama y la punta cambia.

El problema:

 the landscape nib does not appear as landscape, but portrait! The status bar is correctly rotated and appears on the top: (Sorry, couldn't paste the image, because my account is new. The screenshot is in landscape, with a landscape status bar, but a landscape view shown as portrait.) 

Uno podría pensar que el problema radica en no establecer la orientación como Paisaje en las métricas simuladas de IB para la vista, pero he hecho eso y la vista aparece como paisaje en IB. (No creo que incluso sería posible crear un button girado como ese si la vista fuera vertical). Además de estos dos nibs , tengo una mainwindow.xib , que contiene los objects del delegado, window y controller de la aplicación.

EDITAR: me di count de que las vistas realmente giran, cuando deberían "mantenerse al día". Es como si hubiera una transformación adicional. Cuando giro el teléfono a 90 ° a la derecha, el paisaje xib se muestra rotado a 90 ° a la derecha. Cuando giro el teléfono a 90 ° a la derecha, el retrato xib se muestra al revés. La barra de estado siempre se muestra correctamente en la parte superior.

EDIT2: usando

 self.view.transform = CGAffineTransformMakeRotation((M_PI * (90) / 180.0)); 

in willRotateToInterfaceOrientation Puedo rotar la vista hacia el paisaje a la izquierda (y hacia cualquier orientación que desee), por lo que puedo usarla como solución temporal. Sin embargo, tengo otros proyectos, donde la vista gira automáticamente y no requiere el uso de CGAffineTransformMakeRotation. Es como si algo impide la rotation automática aquí.

¿Estás agregando la view cargada desde nib como subView? Si solo la barra de estado está girando, significa que su vista anterior se cuelga mientras se libera la vista y se agrega la nueva vista. Puede contar cómo se agrega la vista cargada desde xib a la SuperView.

Asegúrese de liberar la vista anterior correctamente mientras carga la otra vista, ponga NSLOG en reposo de las vistas y compruebe si la vista se libera por completo.

Había hecho algo similar a esto solo en vez de hacer un file nib por separado. Acabo de agregar dos subvenciones a la nib principal como prtraitView y Landscape View

y los cambié de la siguiente manera

En el método viewDidAppear

 -(void)viewDidAppear:(BOOL)animated{ if(UIDeviceOrientationIsPortrait(self.interfaceOrientation)) { self.portraitVIew.frame=self.view.bounds; self.portraitVIew.frame=self.view.frame; [self.view addSubview:self.portraitVIew]; }else{ self.landscapeView.frame=self.view.frame; [self.view addSubview:self.landscapeView]; } self.view.autoresizesSubviews = YES; [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(deviceOrientationDidChangeNotification:) name:UIDeviceOrientationDidChangeNotification object:nil]; } 

y luego implementó deviceOrientationDidChangeNotification de la siguiente manera

 - (void)deviceOrientationDidChangeNotification:(NSNotification*)note { if ([[UIDevice currentDevice] userInterfaceIdiom]==UIUserInterfaceIdiomPad) { }else{ UIDeviceOrientation orientation = [[UIDevice currentDevice] orientation]; if(UIDeviceOrientationIsLandscape(self.interfaceOrientation)) { self.landscapeView.hidden=NO; self.landscapeView.frame=self.view.frame; [self.portraitVIew removeFromSuperview]; [self.view addSubview:self.landscapeView]; }else { self.landscapeView.hidden=YES; self.portraitVIew.frame=self.view.frame; NSLog(@"Portrait"); [self.view addSubview:self.portraitVIew]; } } } 

Funcionó muy bien para mí …