item custom bar ios iphone objective-c uinavigationbar transparency

ios - custom - navigation item swift



Hacer UINavigationBar transparente (16)

¿Cómo hacer una barra de UINavigation transparente ? Aunque quiero que sus elementos de barra permanezcan visibles.


C # / Solución Xamarina

NavigationController.NavigationBar.SetBackgroundImage(new UIImage(), UIBarMetrics.Default); NavigationController.NavigationBar.ShadowImage = new UIImage(); NavigationController.NavigationBar.Translucent = true;


¿Quiere decir que es totalmente transparente o que utiliza el estilo negro translúcido que se ve en la aplicación Fotos? Lo último que puedes lograr configurando su propiedad UIBarStyleBlackTranslucent en UIBarStyleBlackTranslucent . El primero ... no estoy seguro. Si desea que los elementos en él sigan siendo 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.


Compruebe RRViewControllerExtension , que se dedica a la gestión de apariencia de la barra de UINavigation.

con RRViewControllerExtension en su proyecto, solo necesita anular

-(BOOL)prefersNavigationBarTransparent;

en tu viewcontroller.


Desde IOS7:

self.navigationController.navigationBar.translucent = YES; self.navigationController.navigationBar.shadowImage = [UIImage new]; self.navigationController.view.backgroundColor = [UIColor clearColor]; [self.navigationController.navigationBar setBackgroundImage:[UIImage new] forBarMetrics:UIBarMetricsDefault]; self.navigationController.navigationBar.backgroundColor = [UIColor clearColor];


Después de hacer lo que todos dijeron anteriormente, es decir:

navigationController?.navigationBar.setBackgroundImage(UIImage(), forBarMetrics: .default) navigationController?.navigationBar.shadowImage = UIImage() navigationController!.navigationBar.isTranslucent = true

... mi barra de navegación seguía siendo blanca . Así que agregué esta línea:

navigationController?.navigationBar.backgroundColor = .clear

... et voila! Eso parecía hacer el truco.


El siguiente código expande la respuesta superior elegida para este hilo, para deshacerse del borde inferior y establecer el color del texto:

  1. Las dos últimas líneas codificadas de este código establecen la transparencia. ¡Tomé prestado ese código de este hilo y funcionó perfectamente!

  2. La propiedad "clipsToBounds" era el código que encontré que eliminó la línea del borde inferior con OR sin el conjunto de transparencias (por lo tanto, si decide utilizar un fondo blanco / negro / etc. En su lugar, no habrá una línea de borde).

  3. La línea "tintColor" (segunda línea codificada) configura mi botón Atrás en gris claro

  4. Guardé barTintColor como respaldo. No sé por qué la transparencia no funcionaría, pero si no lo hace, quiero que mi bg white como la tenía antes.

    let navigationBarAppearace = UINavigationBar.appearance() navigationBarAppearace.tintColor = UIColor.lightGray navigationBarAppearace.barTintColor = UIColor.white navigationBarAppearace.clipsToBounds = true navigationBarAppearace.isTranslucent = true navigationBarAppearace.setBackgroundImage(UIImage(), for: .default) navigationBarAppearace.shadowImage = UIImage()


En iOS5 puedes hacer esto para que la barra de navegación sea transparente:

nav.navigationBar.translucent = YES; // Setting this slides the view up, underneath the nav bar (otherwise it''ll appear black) const float colorMask[6] = {222, 255, 222, 255, 222, 255}; UIImage *img = [[UIImage alloc] init]; UIImage *maskedImage = [UIImage imageWithCGImage: CGImageCreateWithMaskingColors(img.CGImage, colorMask)]; [nav.navigationBar setBackgroundImage:maskedImage forBarMetrics:UIBarMetricsDefault]; [img release];


Esto funciona para Swift 2.0.

navigationController!.navigationBar.setBackgroundImage(UIImage(), forBarMetrics: UIBarMetrics.Default) navigationController!.navigationBar.shadowImage = UIImage() navigationController!.navigationBar.translucent = true


Esto parece funcionar:

@implementation UINavigationBar (custom) - (void)drawRect:(CGRect)rect {} @end navigationController.navigationBar.backgroundColor = [UIColor clearColor];


Otra forma en la que funcionó para mí es subclasificar UINavigationBar y dejar vacío el método drawRect.

@IBDesignable class MONavigationBar: UINavigationBar { // Only override drawRect: if you perform custom drawing. // An empty implementation adversely affects performance during animation. override func drawRect(rect: CGRect) { // Drawing code }}


Para cualquier persona que quiera hacer esto en Swift 2.x:

self.navigationController?.navigationBar.setBackgroundImage(UIImage(), forBarMetrics: .Default) self.navigationController?.navigationBar.shadowImage = UIImage() self.navigationController?.navigationBar.translucent = true

o Swift 3.x:

self.navigationController?.navigationBar.setBackgroundImage(UIImage(), for: .default) self.navigationController?.navigationBar.shadowImage = UIImage() self.navigationController?.navigationBar.isTranslucent = true


Prueba el siguiente fragmento de código:

self.navigationController.navigationBar.translucent = YES;


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:

self.navigationController.navigationBar.translucent = YES; self.navigationController.navigationBar.opaque = YES; self.navigationController.navigationBar.tintColor = [UIColor clearColor]; self.navigationController.navigationBar.backgroundColor = [UIColor clearColor];


Si alguien se pregunta cómo lograr esto en iOS 7+, aquí hay una solución (compatible con iOS 6 también)

En Objective-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 veloz 2

self.navigationBar.setBackgroundImage(UIImage(), forBarMetrics: .Default) self.navigationBar.shadowImage = UIImage() self.navigationBar.translucent = true

Discusión

La configuración de translucent a YES en la barra de navegación hace el truco, debido a un comportamiento descrito en la documentación de UINavigationBar . Voy a informar aquí el fragmento relevante:

Si establece esta propiedad en 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.


para Swift 3.0:

override func viewDidLoad() { super.viewDidLoad() navigationController?.navigationBar.setBackgroundImage(UIImage(), for: .default) navigationController?.navigationBar.shadowImage = UIImage() navigationController?.navigationBar.isTranslucent = true }


extension UINavigationBar { var isTransperent: Bool { get { return false // Just to satisfy property } set { if newValue == true { self.shadowImage = UIImage() self.isTranslucent = true self.setBackgroundImage(UIImage(), for: .default) }else{ self.shadowImage = UIImage() self.isTranslucent = false self.setBackgroundImage(nil, for: .default) } } } }