2008-10-23 7 views
9

estoy usando un mando de navegación, y tengo el estilo ajustado a:Navigation Controller Estilo transparente Bar no está funcionando

navController.navigationBar.barStyle = UIBarStyleBlackTranslucent; 

Pero cuando ejecuto mi programa, el controlador de navegación parece que está en la parte superior de un fondo blanco, no mi fondo. Cuando presiono un controlador, hacia la izquierda o hacia la derecha, toda mi vista, la actual, cambia a la parte superior exactamente del tamaño de la barra de navegación. Y es allí donde puedo ver mi fondo a través de la barra del controlador de navegación. ¿Algunas ideas? Cuando mi barStyle está configurado como opaco, todo se ve bien. Estaba pensando en configurar mi marco de visión con un valor "y" negativo, pero creo que debería haber una manera más elegante.

Respuesta

9

Creo que el UINavigationController supone que sus marcos de vista de controlador no incluyen el área debajo de la barra de navegación.

UIBarStyleBlackTranslucent se usa con mayor frecuencia para UIToolbar, por lo que Apple probablemente no hizo que fuera fácil de usar con UINavigationBar. Es probable que deba abandonar el UINavigationController o comenzar a piratear los marcos (teniendo cuidado con las rotaciones), si quiere renderizar de manera confiable en el área de la barra.

Además, si su intención es ocultar la barra de navegación después de unos segundos, obtendrá un mucho más fácil si lo desvanece (como la aplicación Fotos) en lugar de intentar deslizarlo hacia arriba (como Mobile Safari). Créeme en ese ... que me llevó un lote de tiempo para aprender de la manera difícil.

+1

Este no es el caso en iOS 5 y 6. Verifique mi respuesta a continuación con imagen transparente y translúcida = SÍ, que permite que el contenido fluya por debajo de la barra. – Resh32

1

El controlador de navegación compensa el sistema de coordenadas de todas sus subvistas para que dibujen debajo de la barra de navegación.

Extienda el marco de su vista en el dominio negativo y para que se dibuje debajo de la barra de navegación.

+0

Intenté esto, sin suerte. Continuaré probando, ya que esta parece ser la forma obvia. – carlos

+0

Esto no funciona porque UINavigationController * realmente * desea administrar el tamaño de las vistas que administra por sí mismo, por lo que tiende a restablecer los marcos a voluntad. Puede intentar restablecer el marco de la vista que desea deslizar debajo de * después de * que la vista esté en la pantalla, pero su millaje puede variar. – rpj

0

Si configura la barra de navegación del controlador de navegación en transparente en su delegado de la aplicación lo suficientemente temprano (funcionó antes de agregar el controlador de navegación a la ventana), automáticamente cambiará su vista debajo de la barra de navegación.

Desafortunadamente, tampoco cambia su vista debajo de la barra de estado. Triste, parece que necesitas implementar tu propia versión de UINavigationController. Afortunadamente, no es tan malo como UINavigationBar es bastante reutilizable.

+0

Bueno, tal vez la solución es esa, implementar mi propia versión. – carlos

2

Tuve el mismo problema, y ​​lo resolví haciendo que el fondo de la vista raíz fuera el mismo que mi vista. El área blanca detrás de la barra de navegación resultó ser la vista raíz.

1

Debe establecer el estilo de barra en su archivo info.plist para que se desplace todo correctamente.

Sin embargo, no lo he probado desde que se lanzó el 2.1 f/w, pero cuando probé esto en 2.0 encontré que la configuración se perdió después de una rotación de vertical a horizontal.

3

me encontré con este mismo problema (en 3.1.3) y si bien no se puede establecer el estilo de barra después de la navigationbar ya se ha configuración se pueden establecer los valores translúcidos tintColor y siempre que lo desee:

self.navigationController.navigationBar.tintColor = [UIColor blackColor]; 
    self.navigationController.navigationBar.translucent = YES; 

Creará la barra 'blackTranslucent', cambio la barra de navegación cuando presiono ciertos controladores de visualización en la pila.

1

intente utilizar esto, puede ser útil.

_topToolBar.barStyle = UIBarStyleBlackTranslucent; 
_topToolBar.alpha = 0.3; 
1

Tuve el mismo problema. ¡Lo resolví!

ImageViewExtendController *detailImageController = [[ImageViewExtendController alloc] init]; 
[detailImageController loadImage:url]; 
[self.navigationController pushViewController:detailImageController animated:YES]; 
0

Prueba esto:

self.tabBarController.tabBar.superview.backgroundColor = [UIColor blackColor]; 
4
self.navigationController.navigationBar.tintColor = [UIColor colorWithRed:0.169 green:0.373 blue:0.192 alpha:0.9]; 
self.navigationController.navigationBar.translucent = YES; 

Nota:

  1. No utilice self.navigationBarStyle y self.navigationBarTintColor a cambiar.
  2. Agregue las dos últimas declaraciones a su viewDidLoad.
7

Simplemente use una imagen de fondo transparente, y translúcida = SÍ para permitir que el contenido fluya por debajo de la barra. Funciona en iOS 5/6. Agregue en viewDidLoad.

self.navigationController.navigationBar.translucent = YES; 
UIImage * backgroundImage = [UIImage imageNamed:@"spacer.gif"]; 
[self.navigationController.navigationBar setBackgroundImage:(UIImage *)backgroundImage forBarMetrics:UIBarMetricsDefault]; 

adjunté aquí la imagen de spacer.gif, una imagen transparente de 1px x 1px.

spacer.gif

+0

funciona maravillosamente, gracias! –

+0

navigationBar.translucent = YES; es la clave, gracias. –

+0

Pregunta anterior, pero en xcode 6 esto funciona mejor para mí – Glavid

0

Cambio en el Extender opciones bordes de niño viewControllers

Como por ejemplo, en el editor de Xcode, vaya a su primer hijo viewcontroller y desarmar las opciones:

Extend Edges; 
    Under Top Bars; 
    Under Bottom Bars; 
    Under Opaque Bars; 

De esta manera su El controlador ViewController no se iniciará debajo de la barra de estado del controlador de navegación, ni la barra de pestañas ni las barras de herramientas

espero que pueda ayudar a cualquier persona

Cuestiones relacionadas