2012-01-13 16 views
5

Mi aplicación utiliza un controlador de navegación con una imagen en la barra de navegación de la página de inicio. La imagen de fondo se hace poniendoEliminar imagen de fondo en UINavigationBar

[navigationController.navigationBar setBackgroundImage:navImage forBarMetrics:UIBarMetricsDefault]; 
[_window addSubview:navigationController.view]; 

en la aplicación delegada. La barra de navegación muestra esta imagen bien.

Cada otra vista no tienen una imagen en la barra de navegación. Por lo tanto, necesito eliminar esta imagen de fondo cuando se presiona cualquier otro controlador de vista. ¿Alguien sabe cómo se puede hacer esto?

Hay muchas respuestas en línea sobre cómo agregar o cambiar una imagen de barra de navegación, pero esta pregunta es un poco diferente. Gracias de antemano.

Respuesta

3

yo creo que esto es la primera respuesta real a esto para iOS5, el problema principal es la "eliminación" de la imagen de fondo una vez que haya terminado. Bueno, solo conserva la imagen existente y vuelve a colocarla cuando hayas terminado.

@implementation MyViewController { 
    UIImage *_defaultImage; 
} 

- (void)viewWillAppear:(BOOL)animated { 
    _defaultImage = [self.navigationController.navigationBar backgroundImageForBarMetrics:UIBarMetricsDefault]; 
    [self.navigationController.navigationBar setBackgroundImage:[UIImage imageNamed:@"bar.png"] forBarMetrics:UIBarMetricsDefault]; 
} 

- (void)viewWillDisappear:(BOOL)animated { 
    [self.navigationController.navigationBar setBackgroundImage:_defaultImage forBarMetrics:UIBarMetricsDefault]; 
} 
+0

enfoque interesante! – alexshafran

0

Parece que la forma más fácil de hacer esto es:

1) establecer el alfa de la barra de navegación en la página de inicio para 0,000001

2) poner la imagen de fondo en una UIImageView "detrás "la barra de navegación (que ahora está libre)

3) use viewWillAppear/viewWillDisappear para establecer la opacidad de la barra de navegación en 1 o en 0.00001 cuando las vistas son presionadas/reventadas.

5

Para quitar fondo UINavigationBar en iOS 5 o posterior, usted debe hacer esto:

[navigationController.navigationBar setBackgroundImage:nil forBarMetrics:UIBarMetricsDefault]; 

creo que sirve

+1

Esta parece que debería funcionar, pero esa función sólo cambia nada para mí si paso una imagen real. – rgbrgb

+0

Lo mismo aquí. –

+2

No funciona. como dijo rgbrgb. solo hace algo con una imagen válida. –

3

imagen de fondo Puede establecer una imagen en blanco creada en tiempo de ejecución con. imagen en blanco

UIGraphicsBeginImageContextWithOptions(CGSizeMake(36, 36), NO, 0.0); 
UIImage *blank = UIGraphicsGetImageFromCurrentImageContext(); 
UIGraphicsEndImageContext(); 
[[UINavigationBar appearance] setBackgroundImage:blank forBarMetrics:UIBarMetricsDefault]; 

Creación en tiempo de ejecución: How to create a blank transparent png in Objective-C?

+0

Esto funciona bien. Aunque utilicé 'CGSizeZero' –

0

Nada aquí me ha funcionado. Después de buscar durante horas, lo único que funcionó fue seguir un source code example provisto por Apple.

¡Puse el siguiente código y funcionó y eliminó finalmente la imagen de la barra de navegación de otros controladores de vista!

// Reset everything about navigation bar. (Other flows' background image used to show up on another view controller) 
    self.navigationController!.navigationBar.setBackgroundImage(nil, for: .default) 
    self.navigationController!.navigationBar.setBackgroundImage(nil, for: .compact) 
    self.navigationController!.navigationBar.barTintColor = nil 
    self.navigationController!.toolbar.barTintColor = nil 
    self.navigationController!.toolbar.isTranslucent = true 

Espero que esto ayude a alguien.

Saludos