1

Я знал его дубликат. Но до сих пор проблема и даже когда пытались с возможностями не работали. Следовательно, отправляя то же самое, чтобы достичь решения. Надеюсь получить помощь от вас, ребята.UINavigationController скрыть навигационную панель для одиночного диспетчера просмотра

Начальный элемент встроен в UINavigationController. Для начального (посадочного вида) панель навигации должна быть скрыта. Другие виды при вызове с посадочного вида - должны отображать навигационную панель.

Я обработки скрыть & шоу навигационной панели в целях посадки путем переопределения методов представления следующим образом:

- (void)viewWillAppear:(BOOL)animated 
{  
    [super viewWillAppear:animated]; 

    // Hiding the navigationbar hidden for the first page 
    [[self navigationController] setNavigationBarHidden:YES animated:YES]; 
} 

// Даже судимый анимированный: НЕТ & анимированные: анимированные

- (void)viewDidDisappear:(BOOL)animated 
{  
    [super viewDidDisappear:animated]; 

    // Showing the navigationbar hidden for the first page 
    [[self navigationController] setNavigationBarHidden:NO animated:YES]; 

} 

Хотя приложение загружается изначально, навигационная панель находится в скрытом состоянии (как ожидается, & работает нормально). Возвращаясь к представлению приземления с контроллера детского вида, навигационная панель скрывается через несколько секунд - приземляющийся вид загружается на экран ui.

Я также попытался использовать метод делегата navigationcontroller в режиме посадки: navigationController: willShowViewController: animated:. Но не в состоянии найти решение, которое мне нужно.

Следовательно, я предоставил делегата диспетчера навигации в одном из моих контроллеров childview и проверил, не является ли дочерний контроллер при выталкивании неконтролируемым контроллером навигационного контроллера, используя условие. Когда да, то я предоставил опцию hide для панели навигации. но также не удалось найти решение.

Во время серфинга было решение для обработки с viewanimation. Я пробовал, и это тоже не получилось.

Снова серфинг, решение, предоставленное поперек, предназначено для обработки аналогичной проблемы с viewwillappear & viewwilldisappear. Я моргнул, так как способ, который я делаю, похож на предложенный способ. Даже тогда не удалось достичь решения.

FYI .. Я использую Xcode 6.3, а цель развертывания - 6.0. Я использую раскадровку для управления представлениями.

Пожалуйста, помогите мне разобраться вопрос ... App loads is hiding the nav bar in landing page. But when landing page is loaded back from a child view then the nav bar gets hidden only after the landing page loaded on to the ui. I do need to get hidden of the nav bar as like when app loads, when the child view pops and the landing view gets loaded on the top of the controller.

+0

Я думаю, что вы пишете код в ViewWillAppear .. из-за этого я думаю, что проблема происходит. потому что этот метод вызывается после viewDidLoad. –

+0

Попробуйте объяснить вопрос правильно и одним словом. –

+0

@AshokLondhe, последние строки, освещенные после того, как «Пожалуйста, помогите мне разобраться в проблеме ...» на вопрос - это моя проблема. –

ответ

1

Используйте этот метод:

[navigationController setNavigationBarHidden:YES]; 

Так что, если вы в какой-то вид контроллера:

[self.navigationController setNavigationBarHidden:YES]; 

Больше уточнений:

UINavigationController имеет свойство navigationBarHidden, что позволяет вам o Скрыть/показать панель навигации для всего контроллера навигации.

Давайте посмотрим на следующей иерархии:

--UINavigationController 
----UIViewController1 
----UIViewController2 
----UIViewController3 

Каждый из трех UIViewController будет иметь навигационную панель, так как они находятся в UINavigationController.Например, вы хотите, чтобы скрыть строку во второй (на самом деле это не имеет значения, в котором один), а затем записать в UIViewController2:

-(void)viewWillAppear:(BOOL)animated { 
    [super viewWillAppear:animated]; 
    [self.navigationController setNavigationBarHidden:YES]; //it hides 
} 

-(void)viewWillDisappear:(BOOL)animated { 
    [super viewWillDisappear:animated]; 
    [self.navigationController setNavigationBarHidden:NO]; // it shows 
} 
+0

Я тоже попробовал. но не в состоянии решить проблему. –

+0

@ M.SwornaVidhya Объясните, что конкретно представляет собой проблема. –

+0

@AshokLondhe, nav bar скрывается через некоторое время после загрузки начального изображения. Мне нужно это, чтобы скрыть, прежде чем начальное представление загрузится на экран. Я пробовал, как упоминалось ранее «_vijeesh'_», что тоже не получилось. –

0

Переписать метод делегата в пользовательских UINavigationController класс:

-(void)navigationController:(UINavigationController *)navigationController willShowViewController:(UIViewController *)viewController animated:(BOOL)animated 
{ 
    [self setNavigationBarHidden:NO]; 
    if ([viewController isKindOfClass:[SomeViewController class]]) 
    { 
     [self setNavigationBarHidden:YES]; 
    } 
} 

Одним из преимуществ для сдачи его в UINavigationController класса является то, что вы не загромождать UIViewController класса с кодом

протестирована и работает.

UPDATE

Создать UINavigationController подкласс: F.E. MyNavigationController

В AppDelegate.h:

#import "MyNavigationController.h" 

@property (nonatomic) MyNavigationController *navigationController; 

Затем отформатируйте ее в AppDelegate.m:

-(BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { 

    //Probably some more code here 

    self.navigationController = [[MyNavigationController alloc] initWithRootViewController:yourRootViewController]; 
    self.window.rootViewController = self.navigationController; 

    self.window.backgroundColor = [UIColor blackColor]; 
    [self.window makeKeyAndVisible]; 

    return YES; 
} 

Затем перезаписать метод делегата в пользовательских UINavigationController класса

я практически не имею опыта работы с раскадровкой поэтому не совсем уверен, как настроить пользовательский UINavigationController, но это то, как я делаю это в коде.

Here's другое сообщение о том, как создать заказ UINavigationController для использования с раскадровки.

+0

как вы реализовали метод делегата в классе uiviewcontroller. Я не могу понять ваш путь. Вы, пожалуйста, эзотерируете. –

+0

Вам нужно создать свой собственный подкласс UINavigationController и использовать его в AppDelegate – Jasper

1

Если вы хотите скрыть панель навигации во втором представлении, тогда не пытайтесь управлять в viewWillAppear и viewWillDisappear, потому что я столкнулся с множеством проблем, пытаясь так же, как и это, и это также привело к ограничениям. Просто используйте делегат для контроллера навигации в appDelegate, он отлично работает для меня.

self.navigationController.delegate = self; 

    - (void)navigationController:(UINavigationController *)navigationController willShowViewController:(UIViewController *)viewController animated:(BOOL)animated { 
     if ([viewController isKindOfClass:[LoginViewController class]]) 
    { 
      [self.navigationController setNavigationBarHidden:YES animated:animated]; 
     } else { 
      [self.navigationController setNavigationBarHidden:NO animated:animated]; 
     } 
    } 
+0

Этот ответ действительно полезен. Это предотвращает многие ошибки, особенно когда вы используете внутри UITabBarController. Если вы поместите скрытую логику в каждый VC, NavBar будет скрываться некорректно. – mariotaku