Tengo una jerarquía de controlador de vista y el controlador superior se muestra como modal y me gustaría saber cómo mostrar la barra de navegación cuando se usa
'UIViewController:presentViewController:viewControllerToPresent:animated:completion'
Los documentos para 'presentViewController: animated: completa:' nota:
'En iPhone y iPod touch, la vista presentada es siempre pantalla completa. En iPad, la presentación depende del valor de la propiedad modalPresentationStyle. '
Para 'modalPresentationStyle', los documentos dicen:
El estilo de presentación determina cómo se muestra en pantalla un controlador de vista presentado modalmente. En iPhone y iPod touch, los controladores de vista modal siempre se presentan en pantalla completa, pero en iPad hay varias opciones de presentación diferentes.
¿Hay alguna forma de asegurarse de que la barra de navegación esté visible debajo de la barra de estado una vez que se muestre el control de vista? ¿Debo interpretar el documento como, no tiene ninguna opción de iPhone / iPod y solo en iPad?
Anteriormente, estaba usando lo 'UIViewController:presentModalViewController:animated'
que funcionaba bien, pero desde iOS 5.0, la API ha quedado obsoleta, así que voy a cambiar a la nueva.
Visualmente, lo que quiero hacer es que el nuevo controlador se deslice desde la parte inferior de la pantalla, como solía hacer la API anterior.
[actualizando con código]:
// 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];
fuente
(void)presentViewController:(UIViewController *)viewControllerToPresent animated: (BOOL)flag completion:(void (^)(void))completion
'NSInvalidArgumentException', reason: 'Pushing a navigation controller is not supported'
). ¿Cómo puede funcionar esto?Navegación:
Volver:
Navegación:
Volver:
fuente
Puedes usar:
Volviendo (creo):
fuente
Tuve el mismo problema en ios7. Lo llamé en selector y funcionó tanto en ios7 como en ios8.
fuente
Todo lo que
[self.navigationController pushViewController:controller animated:YES];
hace es animar una transición y agregarla a la pila del controlador de navegación, y algunas otras cosas interesantes de animación de la barra de navegación. Si no le importa la animación de la barra, entonces este código debería funcionar. La barra aparece en el nuevo controlador y obtienes un gesto pop interactivo.Editar: Lo sentimos, presentViewController llenará la pantalla completa. Necesitará hacer una transición personalizada, con CGAffineTransform.translation o algo así, animar el controlador con la transición, luego agregarlo a los viewControllers de navigationController.
fuente
Swift 3
fuente
Versión Swift: presenta un ViewController que está integrado en un controlador de navegación.
fuente
Yo uso este código. Funciona bien en iOS 8.
fuente
Una solución
fuente
Si no configuró la propiedad modalPresentationStyle (como UIModalPresentationFormSheet), la barra de navegación se mostrará siempre. Para asegurarse, siempre haga
Esto mostrará la barra de navegación siempre.
fuente
Si usa NavigationController en Swift 2.x
fuente
prueba esto
fuente