¿Cómo haces que una barra UINavigationBar sea transparente ? Aunque quiero que sus elementos de barra permanezcan visibles.
235
¿Cómo haces que una barra UINavigationBar sea transparente ? Aunque quiero que sus elementos de barra permanezcan visibles.
Si alguien se pregunta cómo lograr esto en iOS 7+, aquí hay una solución (también compatible con iOS 6)
En el objetivo-C
[self.navigationBar setBackgroundImage:[UIImage new]
forBarMetrics:UIBarMetricsDefault];
self.navigationBar.shadowImage = [UIImage new];
self.navigationBar.translucent = YES;
En Swift 3 (iOS 10)
self.navigationBar.setBackgroundImage(UIImage(), for: .default)
self.navigationBar.shadowImage = UIImage()
self.navigationBar.isTranslucent = true
En swift 2
self.navigationBar.setBackgroundImage(UIImage(), forBarMetrics: .Default)
self.navigationBar.shadowImage = UIImage()
self.navigationBar.translucent = true
Configuración translucent
de YES
la barra de navegación hace el truco, debido a un comportamiento descrito en la UINavigationBar
documentación. Informaré aquí el fragmento relevante:
Si establece esta propiedad
YES
en una barra de navegación con una imagen de fondo personalizada opaca, la barra de navegación aplicará una opacidad del sistema inferior a 1.0 a la imagen.
[self.navigationController.navigationBar setBackgroundImage:nil forBarMetrics:UIBarMetricsDefault]; self.navigationController.navigationBar.shadowImage = nil; self.navigationController.navigationBar.translucent = NO;
self.navigationController?.navigationBar.setBackgroundImage(UIImage(), forBarMetrics: UIBarMetrics.Default) self.navigationController?.navigationBar.shadowImage = UIImage() self.navigationController?.navigationBar.translucent = true
En iOS5 puede hacer esto para hacer que la barra de navegación sea transparente:
fuente
[[UINavigationBar appearance] setShadowImage: [[UIImage alloc] init]];
Desde IOS7:
fuente
Para cualquiera que quiera hacer esto en Swift 2.x:
o Swift 3.x:
fuente
Esto parece funcionar:
fuente
-drawRect:
en una subclase propiamente dicha, no en una categoría, y luego usar esta subclase como barra de navegación.Después de hacer lo que todos los demás dijeron anteriormente, es decir:
... mi barra de navegación todavía estaba blanca . Entonces agregué esta línea:
... et voila! Eso pareció hacer el truco.
fuente
Si compila con la última versión beta de iOS 13.4 y XCode 11.4, la respuesta aceptada ya no funcionará. He encontrado otra forma, tal vez es solo un error en el software beta, pero lo estoy escribiendo allí, por si acaso
(rápido 5)
fuente
Sé que este tema es antiguo, pero si la gente quiere saber cómo se hace sin sobrecargar el método drawRect.
Esto es lo que necesitas:
fuente
El siguiente código se expande sobre la respuesta superior elegida para este hilo, para deshacerse del borde inferior y establecer el color del texto:
Las dos últimas líneas codificadas de este código establecen la transparencia. ¡Tomé prestado ese código de este hilo y funcionó perfectamente!
La propiedad "clipsToBounds" fue el código que encontré que eliminó la línea del borde inferior con OR sin conjunto de transparencias (así que si decides ir con un fondo blanco / negro / etc. Sólido, todavía no habrá línea de borde).
La línea "tintColor" (segunda línea codificada) estableció mi botón de retroceso en gris claro
Mantuve barTintColor como respaldo. No sé por qué la transparencia no funcionaría, pero si no funciona, quiero mi bg blanco como solía tenerlo
fuente
para Swift 3.0:
fuente
Solución C # / Xamarin
fuente
Pruebe el siguiente código:
fuente
¡Otra forma que funcionó para mí es subclasificar UINavigationBar y dejar el método drawRect vacío!
fuente
En Swift 4.2
(en viewWillAppear), y luego en viewWillDisappear, para deshacerlo, coloque
fuente
¿Te refieres a completamente transparente, o usando el estilo negro translúcido visto en la aplicación Fotos? Esto último se puede lograr estableciendo su
barStyle
propiedad enUIBarStyleBlackTranslucent
. El primero ... no estoy seguro. Si desea que los elementos en él aún estén visibles, es posible que tenga que investigar un poco en la jerarquía de vistas de la barra y eliminar la vista que contiene su fondo.fuente
Esto funciona para Swift 2.0.
fuente
Verifique RRViewControllerExtension , que se dedica a la gestión de la apariencia de la barra UINavigation.
con RRViewControllerExtension en su proyecto, solo necesita anular
en tu viewcontroller.
fuente
fuente