У меня есть иерархия контроллеров представления, и самый верхний контроллер отображается как модальный, и я хотел бы знать, как отображать панель навигации при использовании
'UIViewController:presentViewController:viewControllerToPresent:animated:completion'
Документы для PresentViewController: animated: Завершение: примечание:
'На iPhone и iPod touch изображение всегда отображается в полноэкранном режиме. На iPad представление зависит от значения свойства modalPresentationStyle. '
Для 'modalPresentationStyle' в документах говорится:
Стиль представления определяет, как модально представленный контроллер представления отображается на экране. На iPhone и iPod touch контроллеры модального представления всегда отображаются в полноэкранном режиме, но на iPad есть несколько различных вариантов представления.
Есть ли способ убедиться, что панель навигации отображается под строкой состояния после отображения самого элемента управления представлением? Должен ли я интерпретировать документ так: у вас нет вариантов iPhone / iPod и только на iPad?
Раньше я использовал тот, 'UIViewController:presentModalViewController:animated'
который работал нормально, но, начиная с iOS 5.0, API устарел, поэтому я перехожу на новый.
Визуально я хочу, чтобы новый контроллер выдвигался из нижней части экрана, как это делал старый API.
[обновление с кодом]:
// My root level view:
UIViewController *vc = [[RootViewController alloc]
initWithNibName:nil
bundle:[NSBundle mainBundle]];
navController = [[UINavigationController alloc] initWithRootViewController:vc];
....
// Within the RootViewController, Second view controller is created and added
// to the hierarchy. It is this view controller that is responsible for
// displaying the DetailView:
SecondTierViewController *t2controller = [[SecondTierViewController alloc]
initWithNibName:nil
bundle:[NSBundle mainBundle]];
[self.navigationController pushViewController:t2controller animated:YES];
// Created by SecondTierViewController
DetailViewController *controller = [[DetailViewController alloc] initWithNibName:nil
bundle:[NSBundle mainBundle]];
controller.modalTransitionStyle = UIModalTransitionStyleCoverVertical;
controller.modalPresentationStyle = UIModalPresentationCurrentContext;
[self.navigationController presentViewController:controller
animated:YES
completion:nil];
(void)presentViewController:(UIViewController *)viewControllerToPresent animated: (BOOL)flag completion:(void (^)(void))completion
'NSInvalidArgumentException', reason: 'Pushing a navigation controller is not supported'
). Как это может работать?Навигация:
Возвращаться:
Навигация:
Возвращаться:
источник
Вы можете использовать:
Возвращаясь (думаю):
источник
У меня такая же проблема была на ios7. Я вызвал его в селекторе, и он работал как на ios7, так и на ios8.
источник
Все, что
[self.navigationController pushViewController:controller animated:YES];
делает a , - это анимация перехода и добавление его в стек контроллера навигации, а также некоторые другие интересные элементы анимации панели навигации. Если вас не волнует анимация полосы, этот код должен работать. Панель появляется на новом контроллере, и вы получаете интерактивный всплывающий жест!Изменить: извините, PresentViewController заполнит весь экран. Вам нужно будет сделать настраиваемый переход с помощью CGAffineTransform.translation или чего-то еще, анимировать контроллер с переходом, а затем добавить его в viewControllers navigationController.
источник
Swift 3
источник
Версия Swift: представляет собой ViewController, встроенный в контроллер навигации.
источник
Я использую этот код. В iOS 8 все работает нормально.
источник
Одно решение
источник
Если вы не установили свойство modalPresentationStyle (например, UIModalPresentationFormSheet), панель навигации будет отображаться всегда. Чтобы гарантировать, всегда делайте
Это всегда будет отображать панель навигации.
источник
Если вы используете NavigationController в Swift 2.x
источник
попробуй это
источник