2012-05-01 15 views
8

Il problema è piuttosto semplice da capire con le immagini. Ho un UINavigationController che consente all'utente di passare da una vista all'altra.NavigationBar non visualizza il properling quando pushViewController

La prima vista contiene una barra di ricerca e di una vista tabella in questo modo: enter image description here

La seconda è una vista di base in cui le informazioni relative alla cella sono visualizzazione

Quando clicco sulla barra di ricerca, la navigazione il controllore viene nascosto e la barra di ricerca è ora in cima.

Ora, se clicco su una cella, si va al secondo punti di vista, ma la barra di navigazione viene prima nascosto come di seguito:

enter image description here

E poi, appare automaticamente così:

enter image description here

ho provato un paio di cose come visualizzare la barra di navigazione prima di premere il controller della vista successivo, ma è piuttosto brutto .. qualcuno sa come avere lo spettacolo la barra di navigazione direttamente sulla seconda vista (come nell'applicazione di contatto)?

[UPDATE]: Codice

AppDelegate.m (sto parlando 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]; 
    } 
} 

Se avete bisogno qualsiasi altra cosa, basta chiedere ma penso che sia tutto lì.

+0

Si prega di inviare un po 'di codice. Altrimenti è molto difficile vedere dove si trova il problema. – MishieMoo

risposta

14

Provare a utilizzare questo codice in ogni viewcontroller.

- (void) viewWillAppear:(BOOL)animated 
{ 

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

} 


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

} 
+2

Ho modificato l'intero layout della mia applicazione in modo da non usarla più, ma funziona come un fascino. Spero che aiuti le altre persone. Grazie. –

+0

Mi aiuta da un mal di testa a dicembre 2015! Grazie. – oyalhi

1

prima di spingere il nuovo controller della vista, si dovrebbe Mostrare la barra di navigazione:

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

+0

Se leggi di nuovo il mio post, noterai che l'ho già provato. Funziona ma è brutto. Vorrei lo stesso comportamento dell'applicazione Contact. –

1

Ho avuto un problema simile con la posizione del mio barra di navigazione. Miniera si muoveva dietro la barra di stato, e fissato il problema impostando manualmente il telaio navbar:

-(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; 
} 

Ho dovuto chiamare questo metodo in diversi luoghi, tra viewWillAppear: e didRotateFromInterfaceOrientation :, ma ha funzionato un piacere :)

+0

L'ho provato ma non risolve il problema. –

+0

È perfettamente funzionante; Grazie. Ho risparmiato un sacco di tempo – msmq

0

Nascondere la UINavigationBar può disturbare le proprietà a volte. Prova a utilizzare la proprietà alpha anziché hidden.

Problemi correlati