2012-05-01 3 views
8

Проблема довольно проста в понимании с картинками. У меня есть UINavigationController, который позволяет пользователю переключаться между представлениями.NavigationBar не отображается, когда pushViewController

Первый вид содержит строку поиска и представления в виде таблицы, как так: enter image description here

Второй основной вид, где информация о ячейке дисплей

Когда я нажимаю на панели поиска, навигации контроллер скрывается, а панель поиска находится наверху.

Теперь, если я нажимаю на ячейки, она идет ко второму видом, но навигационная панель первый скрытый, как показано ниже:

enter image description here

И тогда, он автоматически появляется так:

enter image description here

Я попробовал пару вещей, как показать панель навигации до нажатия на следующий контроллер представления, но это довольно некрасиво .. кто-нибудь знает, как показать навигационную панель непосредственно на втором представлении (например, в контактном приложении)?

[UPDATE]: Код

AppDelegate.m (я говорю о 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]; 
    } 
} 

Если вам нужно что-нибудь еще, просто спросите, но я думаю, что это все.

+0

Пожалуйста, разместите код. В противном случае очень сложно понять, где проблема. – MishieMoo

ответ

14

Попробуйте использовать этот код в каждом контроллере view.

- (void) viewWillAppear:(BOOL)animated 
{ 

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

} 


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

} 
+2

Я изменил весь макет моего приложения, поэтому я больше не использую его, но он работает как шарм. Надеюсь, он поможет другим людям. Спасибо. –

+0

Это помогает мне с головной болью в декабре 2015 года! Спасибо. – oyalhi

1

Перед тем, как нажать на новый контроллер представления, вы должны отобразить панель навигации:

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

+0

Если вы снова прочтете мое сообщение, вы заметите, что я уже пробовал это. Это работает, но это уродливо. Я хотел бы, чтобы такое же поведение, как и в приложении «Контакты». –

1

У меня была аналогичная проблема с позицией моей навигационной панели. Шахта двигалась позади в строке состояния, и я исправил проблему, вручную установив 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; 
} 

Я должен был вызвать этот метод в ряде мест, в том числе: viewWillAppear и didRotateFromInterfaceOrientation :, но он работал a treat :)

+0

Я пробовал, но это не решает проблему. –

+0

Его отлично работает; Благодарю. Сохранено много времени – msmq

0

Скрытие UINavigationBar может иногда мешать свойствам. Попытайтесь использовать свойство alpha вместо hidden.

Смежные вопросы