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:
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" 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).
La línea "tintColor" (segunda línea codificada) configura mi botón Atrás en gris claro
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)
}
}
}
}