Eu tenho uma hierarquia de controlador de visualização e o controlador mais superior é exibido como modal e gostaria de saber como exibir a barra de navegação ao usar
'UIViewController:presentViewController:viewControllerToPresent:animated:completion'
Os documentos para 'presentViewController: animado: conclusão:' nota:
'No iPhone e no iPod touch, a exibição apresentada é sempre em tela inteira. No iPad, a apresentação depende do valor da propriedade modalPresentationStyle. '
Para 'modalPresentationStyle', os documentos dizem:
O estilo de apresentação determina como um controlador de visualização apresentado modalmente é exibido na tela. No iPhone e no iPod touch, os controladores de visualização modal são sempre apresentados em tela inteira, mas no iPad há várias opções de apresentação diferentes.
Existe uma maneira de garantir que a barra de navegação fique visível abaixo da barra de status quando o controle de exibição for exibido? Devo interpretar o documento como, você não tem nenhuma opção de iPhone / iPod e apenas no iPad?
Anteriormente, eu estava usando o 'UIViewController:presentModalViewController:animated'
que funcionava bem, mas desde o iOS 5.0, a API foi descontinuada, então estou mudando para a nova.
Visualmente, o que estou procurando é que o novo controlador deslize na parte inferior da tela, assim como a API antiga costumava fazer.
[atualizando com 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];
fonte
(void)presentViewController:(UIViewController *)viewControllerToPresent animated: (BOOL)flag completion:(void (^)(void))completion
'NSInvalidArgumentException', reason: 'Pushing a navigation controller is not supported'
). Como isso pode funcionar?Navegação:
Voltando:
Navegação:
Voltando:
fonte
Você pode usar:
Voltando (eu acho):
fonte
Eu tive o mesmo problema no iOS7. Chamei-o no seletor e funcionou no iOS7 e no iOS8.
fonte
Tudo o que o a
[self.navigationController pushViewController:controller animated:YES];
faz é animar uma transição e adicioná-la à pilha do controlador de navegação e alguns outros itens legais de animação da barra de navegação. Se você não se importa com a animação da barra, este código deve funcionar. A barra aparece no novo controlador e você obtém um gesto pop interativo!Edit: Desculpe, presentViewController irá preencher a tela inteira. Você precisará fazer uma transição personalizada, com CGAffineTransform.translation ou algo assim, animar o controlador com a transição e adicioná-la aos viewControllers do navigationController.
fonte
Swift 3
fonte
Versão Swift: Apresenta um ViewController que está embutido em um Controlador de Navegação.
fonte
Eu uso este código. Está funcionando bem no iOS 8.
fonte
Uma solução
fonte
Se você não definiu a propriedade modalPresentationStyle (como UIModalPresentationFormSheet), a barra de navegação será exibida sempre. Para garantir, sempre faça
Isso sempre mostrará a barra de navegação.
fonte
Se você usa NavigationController no Swift 2.x
fonte
tente isso
fonte