UINavigationController без навигационной панели - PullRequest
1 голос
/ 18 февраля 2011

У меня есть «целевая страница / представление», которую я не хочу отображать на панели навигации, поэтому я отключаю ее во время viewDidAppear

navigationBarHidden = YES;

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

есть ли способ, чтобы целевая страница была UIView или что-то в этом роде? При касании пункта меню приложение выдвигает новый вид поверх целевой страницы по умолчанию. Похоже, это было бы трудно сделать, если бы целевая страница не была UINavigationController. Какие-нибудь thoguhts?

Ответы [ 4 ]

1 голос
/ 18 февраля 2011

Попробуйте скрыть панель навигации в viewWillAppear, а не в viewDidAppear.

1 голос
/ 18 февраля 2011

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


Итак, вы делаетехочу вернуться на целевую страницу.

С UINavigationController это трудно сделать.Предположим, вы возвращаетесь к виду посадки.При переходе старый вид должен иметь панель навигации, а новый вид (целевую страницу) не должен иметь панель навигации.UINavigationController не позволяет вам вручную изменять анимацию перехода.Другими словами, вы не можете анимировать скрытие / отображение панели навигации вместе с анимацией push / pop (использование viewWillAppear не решает проблему).

Так что бы я сделал, если бы мне действительно это нужно?

У меня был бы rootViewController (из UIViewController), чье представление является единственным подпредставлением окна вашего приложения.Когда ваше приложение запускается, rootViewController добавляет представление посадки в качестве подпредставления своего представления.Когда пользователь выбирает элемент там, вы создаете UINavigationController с соответствующим контроллером представления в качестве его корневого контроллера представления.

И, используя анимацию CATransition с типом kCATransitionPush и подтипом kCATransitionFromRight, вы добавляете представление навигацииконтроллер как подпредставление представления rootViewController.

Затем вам нужна кнопка «назад» для первого просмотра контроллера навигации.Во всех контроллерах представления, которые являются контроллерами представления первого уровня контроллера навигации, создайте элемент кнопки панели с текстом «Назад» и добавьте его в свое свойство navigationItem.leftBarButton.Задайте для кнопки пару target-action (возможно, rootViewController).

Когда срабатывает сообщение действия, используйте анимацию CATransition (теперь с подтипом kCATransitionFromLeft), чтобы удалить текущее представление контроллера навигации из представления rootViewController.

Переход может выглядеть не так идеально, как нативный UINavigationController, но я считаю, что это лучшее, что вы можете получить.

0 голосов
/ 19 июня 2012

Я наткнулся на метод, который прост и хорошо работает для меня, но здесь его пока нет. Я предполагаю, что у вас есть контроллер представления для главной целевой страницы, и он установлен как корневой контроллер представления навигационного контроллера. Затем вы должны скрыть / показать панель навигации в методах viewWillAppear и viewWillDisappear основного контроллера целевой страницы:

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

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

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

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

Источник: http://www.iosdevnotes.com/2011/03/uinavigationcontroller-tutorial/

0 голосов
/ 19 февраля 2011

На самом деле способ сделать это - реализовать метод делегата UINavigationController navigationController:willShowViewController:animated. Этот метод используется для скрытия и отображения панели навигации, чтобы анимация происходила во время анимации push / pop.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...