2012-05-01 32 views
8

El problema es bastante simple de entender con las imágenes. Tengo un UINavigationController que permite al usuario cambiar a las vistas.Barra de navegación que no muestra la propiedad cuando pushViewController

La primera vista contiene una barra de búsqueda y una vista de tabla, así: enter image description here

El segundo es una vista básica donde la información acerca de la célula son pantalla

Cuando hago clic en la barra de búsqueda, la navegación el controlador se oculta y la barra de búsqueda está ahora en la parte superior.

Ahora, si hago clic en una celda, se va a la segunda vista, pero la barra de navegación en primer lugar se oculta, como a continuación:

enter image description here

Y entonces, aparece automáticamente como esa:

enter image description here

he intentado un par de cosas como mostrar la barra de navegación antes de empujar el siguiente controlador de vista, pero es bastante fea .. ¿alguien sabe cómo mostrar la barra de navegación directamente en la segunda vista (como en la aplicación de contacto)?

[ACTUALIZACIÓN]: Código

AppDelegate.m (Estoy hablando de navigationcontroller2)

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 
{  
    self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]]; 
    FirstViewController *viewController1 = [[FirstViewController alloc] initWithNibName:@"FirstViewController" bundle:nil]; 
    SecondViewController *viewController2 = [[SecondViewController alloc] initWithNibName:@"SecondViewController" bundle:nil]; 

    viewController1.managedObjectContext = [self managedObjectContext]; 
    viewController2.managedObjectContext = [self managedObjectContext]; 
    viewController1.viewController2 = viewController2; 

    UINavigationController *navigationcontroller1 = [[UINavigationController alloc] initWithRootViewController:viewController1]; 
    [navigationcontroller1.navigationBar setTintColor:[UIColor lightGrayColor]]; 
    UINavigationController *navigationcontroller2 = [[UINavigationController alloc] initWithRootViewController:viewController2]; 
    [navigationcontroller2.navigationBar setTintColor:[UIColor lightGrayColor]]; 

    self.tabBarController = [[UITabBarController alloc] init]; 
    self.tabBarController.viewControllers = [NSArray arrayWithObjects:navigationcontroller1, navigationcontroller2, nil]; 

    self.window.rootViewController = self.tabBarController; 
    [self.window makeKeyAndVisible]; 

    return YES; 
} 

FirstView.m

- (void) searchBarTextDidBeginEditing:(UISearchBar *)theSearchBar { 
    [self.navigationController setNavigationBarHidden:YES animated:YES]; 
} 

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    if (!noResultsToDisplay) { 
     PinDetailsViewController *pinDetailsViewController = [[PinDetailsViewController alloc] initWithNibName:@"PinDetailsViewController" bundle:nil]; 
     NSManagedObject *managedObject = [fetchedResultsController objectAtIndexPath:indexPath]; 
     Pin *pin = (Pin *) managedObject; 

     [self.navigationItem setTitle:@"Pins"]; 
     [self.navigationController pushViewController:pinDetailsViewController animated:YES]; 
     [pinDetailsViewController updateWithPin:pin]; 
    } 
} 

Si necesita cualquier otra cosa, solo pregunta, pero creo que todo está ahí.

+0

Por favor, publique código. De lo contrario, es muy difícil ver dónde está el problema. – MishieMoo

Respuesta

14

Trate de usar este código en cada controlador de vista.

- (void) viewWillAppear:(BOOL)animated 
{ 

    [self.navigationController setNavigationBarHidden:NO animated:animated]; 

} 


- (void) viewWillDisappear:(BOOL)animated 
{ 
    [self.navigationController setNavigationBarHidden:YES animated:animated]; 

} 
+2

Cambié todo el diseño de mi aplicación, así que ya no la utilizo, pero funciona como un amuleto. Espero que ayude a otras personas. Gracias. –

+0

¡Me ayuda con un dolor de cabeza en diciembre de 2015! Gracias. – oyalhi

1

Antes de empujar el nuevo controlador de vista, se debe mostrar la barra de navegación:

[self.navigationController setNavigationBarHidden:NO animated:YES];

+0

Si vuelve a leer mi publicación, se dará cuenta de que ya lo he intentado. Funciona pero es feo. Me gustaría el mismo comportamiento que en la aplicación de contacto. –

1

He tenido un problema similar con la posición de mi barra de navegación. El mío se mueve hacia arriba detrás de la barra de estado, y me ha solucionado el problema manualmente ajustando el marco de barra de navegación:

-(void)adjustNavBarOrigin 
{ 
    CGRect r = self.navigationController.navigationBar.frame; 
    r.origin = CGPointMake(0, 20); // 20 is the height of the status bar 
    self.navigationController.navigationBar.frame = r; 
} 

tuve que llamar a este método en varios lugares, incluyendo viewWillAppear: y didRotateFromInterfaceOrientation :, pero funcionó un regalo :)

+0

Lo probé, pero no resuelve el problema. –

+0

Funciona perfectamente; Gracias. Ahorro mucho tiempo – msmq

0

Ocultar el UINavigationBar puede alterar las propiedades a veces. Intente utilizar la propiedad alpha en lugar de hidden.

Cuestiones relacionadas