Mam hierarchię kontrolera widoku i najwyższy kontroler jest wyświetlany jako modalny i chciałbym wiedzieć, jak wyświetlić pasek nawigacji podczas używania
'UIViewController:presentViewController:viewControllerToPresent:animated:completion'
Dokumentacja dla „presentViewController: animated: Complete:” Uwaga:
„Na iPhonie i iPodzie touch prezentowany widok jest zawsze na pełnym ekranie. Na iPadzie prezentacja zależy od wartości we właściwości modalPresentationStyle. '
W przypadku „modalPresentationStyle” dokumenty mówią:
Styl prezentacji określa, jak modalnie prezentowany kontroler widoku jest wyświetlany na ekranie. Na iPhonie i iPodzie touch kontrolery widoku modalnego są zawsze prezentowane na pełnym ekranie, ale na iPadzie jest kilka różnych opcji prezentacji.
Czy istnieje sposób, aby upewnić się, że pasek nawigacji jest widoczny pod paskiem stanu, gdy formant widoku zostanie wyświetlony? Czy powinienem interpretować dokument jako, że nie masz żadnych opcji dla iPhone'a / iPoda i tylko na iPadzie?
Wcześniej korzystałem z tego, 'UIViewController:presentModalViewController:animated'
co działało dobrze, ale od iOS 5.0 API zostało wycofane, więc przechodzę na nowe.
Wizualnie chcę, aby nowy kontroler wsuwał się od dołu ekranu, tak jak robił to stary interfejs API.
[aktualizacja za pomocą kodu]:
// 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];
źródło
(void)presentViewController:(UIViewController *)viewControllerToPresent animated: (BOOL)flag completion:(void (^)(void))completion
'NSInvalidArgumentException', reason: 'Pushing a navigation controller is not supported'
). Jak to działa?Nawigacja:
Wracać:
Nawigacja:
Wracać:
źródło
Czy możesz użyć:
Wracając (chyba):
źródło
Miałem ten sam problem na ios7. Nazwałem to w selektorze i działało zarówno na ios7, jak i ios8.
źródło
Wszystko, co
[self.navigationController pushViewController:controller animated:YES];
robi, to animowanie przejścia i dodawanie go do stosu kontrolera nawigacji, a także innych fajnych elementów animacji paska nawigacji. Jeśli nie zależy Ci na animacji paska, ten kod powinien działać. Pasek pojawia się na nowym kontrolerze, a ty otrzymujesz interaktywny gest pop!Edycja: Przepraszamy, presentViewController wypełni cały ekran. Będziesz musiał wykonać niestandardowe przejście za pomocą CGAffineTransform.translation lub czegoś podobnego, animować kontroler z przejściem, a następnie dodać go do viewControllers navigationControllera.
źródło
Szybki 3
źródło
Wersja Swift: przedstawia ViewController, który jest osadzony w kontrolerze nawigacji.
źródło
Używam tego kodu. Działa dobrze w iOS 8.
źródło
Jedno rozwiązanie
źródło
Jeśli nie ustawiłeś właściwości modalPresentationStyle (np. UIModalPresentationFormSheet), pasek nawigacji będzie zawsze wyświetlany. Aby się upewnić, zawsze rób
Spowoduje to wyświetlenie paska nawigacji zawsze.
źródło
Jeśli używasz NavigationController w Swift 2.x
źródło
Spróbuj tego
źródło