Quero exibir, acima de qualquer outra visualização, até a barra de navegação, um tipo de visualização "pop-up" que se parece com isso:
- fundo preto de tela cheia com um alfa de 0,5 para ver o outro
UIViewController
por baixo. - uma
UIView
janela no meio com algumas informações (um calendário, se você quiser saber tudo).
Para fazer isso, criei um UIViewController que contém os dois UIViews
(plano de fundo e janela) e estou tentando exibi-lo. Eu tentei um simples [mySuperVC addSubview:myPopUpVC.view]
, mas ainda tenho a barra de navegação acima.
Tentei apresentá-lo como modal, mas o que está UIViewController
por baixo desaparece e perco meu efeito de transparência.
Alguma idéia para fazer isso, tenho certeza que é bem simples ...
Obrigado!
ios
uiviewcontroller
uinavigationbar
popupwindow
Nicolas Roy
fonte
fonte
Respostas:
Você pode fazer isso adicionando sua visualização diretamente à keyWindow:
UPDATE - Para Swift 4.1 e superior
fonte
[self.navigationController.view addSubview:overlayView];
é o que você realmente querfonte
Aqui está uma solução simples e elegante que está funcionando para mim. Você pode definir a posição z da barra de navegação abaixo da visualização:
Lembre-se de configurá-lo novamente para 0 quando terminar.
fonte
Versões Swift para a resposta verificada:
Swift 4:
Swift 3.1:
fonte
Adicione você visualizar como a subvisão do NavigationController.
Você também pode adicioná-lo sobre a janela:
Espero que isto ajude.. :)
fonte
let navigationBar = viewController.navigationController!.navigationBar navigationBar.addSubview(coverView)
Dalef ótima solução em rápida:
fonte
A resposta do @ Nam funciona muito bem se você apenas deseja exibir sua visualização personalizada, mas se ela precisar de interação do usuário, será necessário desativar a interação para o
navigationBar
.Como dito na resposta de Nam, não se esqueça de reverter essas mudanças:
Você pode fazer isso de uma maneira melhor com uma extensão:
E simplesmente use-o assim:
fonte
Versão rápida da resposta de @Nicolas Bonnet:
Não esqueça que a janela deve ser uma propriedade forte, porque a resposta original leva a uma desalocação imediata da janela
fonte
Eu recomendo que você crie uma nova UIWindow:
Em seguida, você pode gerenciar sua exibição em outro UIViewController. Para remover as janelas:
espero que ajude!
fonte
Há mais de uma maneira de fazer isso:
1- Adicione seu
UIView
on emUIWindow
vez de adicioná-loUIViewController
. Desta forma, estará em cima de tudo.2- Use uma transição personalizada que manterá seu UIViewController aparecendo na parte de trás com um alfa de 0,5
Para isso, recomendo que você analise o seguinte: https://github.com/Citrrus/BlurryModalSegue
fonte
fonte
No Swift 4.2 e no Xcode 10
No objetivo C
UIView * spinnerView; // Esta é a sua opinião
Isso pode funcionar apenas no modo Retrato ou Paisagem.
Mais um código simples é:
fonte
Observe se você deseja adicionar a visualização em tela cheia, use apenas o código abaixo
Adicione esta extensão do UIViewController
Continue como processo normal de adição de subvisão
Agora use na adição de viewDidAppear do UIViewController
fonte
Eu usaria uma subclasse UIViewController contendo uma "Exibição de contêiner" que incorpora seus outros controladores de exibição. Você poderá adicionar o controlador de navegação dentro da Exibição do contêiner (usando o relacionamento de incorporação segue, por exemplo).
Consulte Implementando um Container View Controller
fonte
Este método funciona com xcode 9.4, iOS 11.4
fonte
fonte
Você precisa adicionar uma subvisão à primeira janela com o tipo UITextEffectsWindow. Para o primeiro, porque os teclados personalizados adicionam seus UITextEffectsWindow e, se você adicionar uma subvisão, isso não funcionará corretamente. Além disso, você não pode adicionar uma subvisão à última janela porque o teclado, por exemplo, também é uma janela e você não pode apresentar a partir da janela do teclado. Portanto, a melhor solução que encontrei é adicionar subview (ou até mesmo empurrar o controlador de exibição) à primeira janela com o tipo UITextEffectsWindow, essa janela abrange a visualização acessória, a barra de navegação - tudo.
fonte