Las vistas se oscurecen cuando se presionan en el controller de navigation.

Estoy empujando ViewControllers en NavigationController por segues. Tengo mi propio NavigationController subclass que ha insertado UIImageView en el índice 0: es un background para toda mi aplicación.

El problema es que puedo ver que cuando el nuevo controller de vista llega a la pantalla desde el lado derecho, al principio es como tener una superposition oscura y clara que desaparece cuando se llama a viewDidApear .

Cada controller de vista tiene un self.view.backgroundColor = [UIColor clearColor] . Si lo cambio por un time, todo está bien. ¿Tal vez debería establecer el background de la aplicación de otra manera? Y si no, ¿cómo evitar este efecto darkling?

Aquí tiene la captura de pantalla con este efecto: http://tinypic.com/r/34j9ffs/8

Es debido a la animation de empuje UINavigationController estándar en iOS 7. Cuando un nuevo VC se introduce en la stack, se superpone sobre el VC anterior, con una ligera sombra debajo. Como tal, cuando empujas tus viewControllers que tienen backgrounds claros, ves a través de la sombra cuando se produce la transición.

Hay un par de posibles soluciones:

  • Establezca un color de background en sus viewControllers (probablemente no sea una opción para usted debido a su image de background global). La solución más simple, pero requeriría un cambio en su layout.
  • Implementa tu propia transición usando las nuevas API de iOS 7. Vea un ejemplo aquí y un artículo de Big Nerd Ranch aquí . Esta es realmente la solución "adecuada" para su problema si desea conservar su image de background.
  • Agregue una categoría UINavigationController para agregar una animation push y pop pop más simple, según esta respuesta . Esta es más una solución rápida y hacky.

Creé un segue personalizado que debería hacer el trabajo:

ClearBkgPushSegue.h:

 #import <UIKit/UIKit.h> @interface ClearBkgPushSegue : UIStoryboardSegue @end 

ClearBkgPushSegue.m:

 #import "ClearBkgPushSegue.h" @implementation ClearBkgPushSegue -(void)perform { UIViewController *sourceViewController = self.sourceViewController; UIViewController *destinationViewController = self.destinationViewController; CGRect bounds = [[UIScreen mainScreen] bounds]; UIWindow *window = [[[UIApplication shanetworkingApplication] delegate] window]; UIView *destView = destinationViewController.view; [window insertSubview:destinationViewController.view aboveSubview:sourceViewController.view]; destView.frame = CGRectMake(bounds.size.width, destView.frame.origin.y, destView.frame.size.width, destView.frame.size.height); [UIView animateWithDuration:.35 delay:0 options:UIViewAnimationOptionCurveEaseOut animations:^{ destView.frame = sourceViewController.view.frame; sourceViewController.view.frame = CGRectMake([UIScreen mainScreen].bounds.size.width * -0.33, 0.0, sourceViewController.view.frame.size.width, sourceViewController.view.frame.size.height); sourceViewController.view.alpha = 0; } completion:^(BOOL finished) { [sourceViewController.navigationController pushViewController:destinationViewController animated:NO]; sourceViewController.view.alpha = 1; }]; } @end 

Simplemente select su opción para que sea "Personalizado" y elija esta class y estará listo para ir.