guidelines color bar ios uinavigationbar ios7

color - iOS 7: Deshabilitar UINavigationBar Translucency para toda la aplicación



navigation bar ios swift 4 (9)

Agregando esto en caso de que alguien siga luchando contra esto.

Sin embargo, puede engañarlo especificando una imagen que no existe, lo que hará que la barra de navegación, INCLUYENDO su barra de herramientas, se vuelva opaca

[[UIToolbar appearance] setBackgroundColor:[UIColor colorWithRed:219.0/255.0 green:67.0/255.0 blue:67.0/255.0 alpha:1.0]]; [[UIToolbar appearance] setBackgroundImage:[[UIImage alloc] init] forToolbarPosition:UIBarPositionAny barMetrics:UIBarMetricsDefault];

¿Hay alguna manera de deshabilitar UINavigationBar Translucency para una aplicación completa?

Soy consciente de que usar [self.navigationController.navigationBar setTranslucent:NO] puede solucionar este problema para un solo controlador, pero tengo muchos UINavigationBars en mi aplicación y esta es una solución bastante tediosa.

He intentado [[UINavigationBar appearance] setTranslucent:NO] , pero esa funcionalidad sorprendentemente no es compatible. Al hacerlo Terminating app due to uncaught exception ''NSInvalidArgumentException'', reason: ''*** Illegal property type, c for appearance setter, _installAppearanceSwizzlesForSetter:''

Si LO TENGO, puedo revisar toda la aplicación configurando UINavigationBars para deshabilitar la translucidez una por una, pero debe haber alguna solución más elegante para este problema ...


Aquí hay una solución Swift si desea aplicar este estilo a toda la aplicación.

en la clase AppDelegate agregue esto a las didFinishLaunchingWithOptions :

Para Swift 2:

UINavigationBar.appearance().translucent = false

Para Swift 3:

UINavigationBar.appearance().isTranslucent = false


Creo que la API de apariencia no admite propiedades translúcidas de la barra de navegación. Pero puede hacer esto para una aplicación completa como esta, por favor, eche un vistazo a este código:

Aquí la pantalla de menú es un controlador de vista de raíz.

MenuScreen *ms = [[MenuScreen alloc]initWithNibName:@"MenuScreen" bundle:nil]; UINavigationController *nv = [[UINavigationController alloc]initWithRootViewController:ms]; //This will set property for whole App. [nv.navigationBar setTranslucent:NO]; self.window.rootViewController = nv ;


Creo que tienes razón en que no hay ningún proxy de apariencia disponible para esta propiedad. ¿Está utilizando los objetos UINavigationControllers o UINavigationBar? Si está utilizando UINavigationBars, puede crear una subclase y crear una barra de navegación no translúcida.

Archivo de cabecera:

#import <UIKit/UIKit.h> @interface ABCNonTranslucentNavBar : UINavigationBar @end

Archivo de implementación:

#import "ABCNonTranslucentNavBar.h" @implementation ABCNonTranslucentNavBar - (void)drawRect:(CGRect)rect { [self setTranslucent:NO]; }

Luego simplemente reemplaza los UINavigationBars con tu subclase. También podría hacer algo similar con un UINavigationController subclasificado.


Parece muy simple con este código en appDelegate didFinishLaunchingWithOptions (funciona bien con iOS 8 y versiones anteriores)

[[UINavigationBar appearance] setTranslucent:NO];


Sé que esto es viejo, pero esto podría ser útil para alguien;

Puede usar una categoría y dentro de ella * establecer la propiedad [translucent][1]

@implementation UINavigationBar (MakeTranslucent) -(void)willMoveToWindow:(UIWindow *)newWindow { [super willMoveToWindow:newWindow]; self.translucent = NO; } @end

  • Usé willMoveToWindow, no sé si esta es una buena idea, así que UAYOR.

Si no usa el guión gráfico, pero IB, configure el estilo de la barra de navegación de su MainWindows.xib en NO translúcido y establezca como color no el color claro.


Vea el extracto de la documentación del código UIKit:

/* New behavior on iOS 7. Default is YES. You may force an opaque background by setting the property to NO. If the navigation bar has a custom background image, the default is inferred from the alpha values of the image—YES if it has any pixel with alpha < 1.0 If you send setTranslucent:YES to a bar with an opaque custom background image it will apply a system opacity less than 1.0 to the image. If you send setTranslucent:NO to a bar with a translucent custom background image it will provide an opaque background for the image using the bar''s barTintColor if defined, or black for UIBarStyleBlack or white for UIBarStyleDefault if barTintColor is nil. */

La solución correcta de Swift 4 es

UINavigationBar.appearance().isTranslucent = false UINavigationBar.appearance().backgroundColor = .white


si establece la translucidez de la primera barra de navegación en la pila en false [self.navigationController.navigationBar setTranslucent:NO] , se reflejará en todos los siguientes NavigationViewController que se insertan en esa pila.