uinavigationbar shadow ios7

¿Cómo eliminar la sombra interna de UINavigationBar en iOS 7?



shadow ios7 (6)

Ejemplo de sombra interior

Estoy intentando colocar la barra de navegación debajo de la otra para que se vea como una barra de navegación alta. Pero en iOS 7, UINavigationBar ahora tiene una sombra interior en la parte superior y en la parte inferior. Realmente necesito quitarlo. Pero no encontré ninguna solución. Parece que la sombra está prerendida, pero en realidad aparece lentamente en aproximadamente 0,4 segundos después de que aparece la vista.

He intentado casi todo, pero la sombra sigue ahí. Quité la línea horizontal debajo de la barra con este código:

for (UIView *view in [[[self.navigationController.navigationBar subviews] objectAtIndex:0] subviews]) { if ([view isKindOfClass:[UIImageView class]]) view.hidden = YES; }

Pero no puedo entender cómo quitar la sombra. ¡Muchas gracias!

He intentado esto:

[self.navigationController.navigationBar setShadowImage:[[UIImage alloc] init]];

Pero ese código ni siquiera elimina la línea horizontal debajo de la barra (este método necesita una imagen de fondo personalizada). Yo uso la versión 5.0 de Xcode (5A11365x)


En Swift (probado en iOS9)

self.navigationController!.navigationBar.setBackgroundImage(UIImage(), forBarMetrics: .Default) self.navigationController!.navigationBar.shadowImage = UIImage()


La línea "horizontal" en la parte inferior de la barra de navegación es simplemente su shadowImage. Simplemente puede eliminarse aplicando un UIImage vacío. De acuerdo con la documentación, también debe configurar una imagen de fondo personalizada:

- (void)viewDidLoad { [super viewDidLoad]; // Set the background and shadow image to get rid of the line. [self.navigationController.navigationBar setBackgroundImage:[[UIImage alloc] init] forBarMetrics:UIBarMetricsDefault]; self.navigationController.navigationBar.shadowImage = [[UIImage alloc] init]; }


Puede usar fácilmente esta categoría de UINavigationBar-Addition denominada UINavigationBar-Addition encontrada here He utilizado la solución descrita en esta answer pero no pude deshacerme de la línea de 1Px en la barra de navegación.


Realmente no debería como CaptJak ha señalado, pero para cualquier otra persona que se quede atascada:

for (UIView *view in self.navigationController.navigationBar.subviews) { for (UIView *view2 in view.subviews) { if ([view2 isKindOfClass:[UIImageView class]]) { [view2 removeFromSuperview]; } } }


Si su aplicación solo es compatible con iOS 6.0+, simplemente puede agregar la siguiente línea:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { ... [[UINavigationBar appearance] setShadowImage:[UIImage new]]; ... }


Tuve un problema similar, en el que quería eliminar la línea de 1px y la sombra de la barra de navegación en iOS7. En mi caso, necesitaba una línea verde gruesa de 3 puntos en la parte inferior de la barra de navegación.

Si existe una solución para deshacerse de la línea de 1px en la parte inferior de la barra de navegación que no involucra subvistas, no lo sé, pero hay una manera de agregar una vista que oculta esa línea de la siguiente manera (en Al menos el color de la línea se puede cambiar de esa manera).

UIView * bgView = [[UIView alloc] initWithFrame:CGRectMake(0, navBarHeight, navBarWidth, 1)]; // Dont use magic numbers in your code bgView.backgroundColor = //some other color [navigationBar addSubview:bgView]; [navigationBar setShadowImage:nil];