Como você torna um UINavigationBar transparente ? Embora eu queira que seus itens de barra permaneçam visíveis.
235
Como você torna um UINavigationBar transparente ? Embora eu queira que seus itens de barra permaneçam visíveis.
Se alguém está se perguntando como conseguir isso no iOS 7+, aqui está uma solução (compatível com iOS 6 também)
No Objetivo-C
[self.navigationBar setBackgroundImage:[UIImage new]
forBarMetrics:UIBarMetricsDefault];
self.navigationBar.shadowImage = [UIImage new];
self.navigationBar.translucent = YES;
No Swift 3 (iOS 10)
self.navigationBar.setBackgroundImage(UIImage(), for: .default)
self.navigationBar.shadowImage = UIImage()
self.navigationBar.isTranslucent = true
Em rápido 2
self.navigationBar.setBackgroundImage(UIImage(), forBarMetrics: .Default)
self.navigationBar.shadowImage = UIImage()
self.navigationBar.translucent = true
Definir translucent
como YES
na barra de navegação faz o truque, devido a um comportamento discutido na UINavigationBar
documentação. Vou relatar aqui o fragmento relevante:
Se você definir essa propriedade
YES
em uma barra de navegação com uma imagem de plano de fundo personalizada opaca, a barra de navegação aplicará uma opacidade do sistema menor que 1,0 à imagem.
[self.navigationController.navigationBar setBackgroundImage:nil forBarMetrics:UIBarMetricsDefault]; self.navigationController.navigationBar.shadowImage = nil; self.navigationController.navigationBar.translucent = NO;
self.navigationController?.navigationBar.setBackgroundImage(UIImage(), forBarMetrics: UIBarMetrics.Default) self.navigationController?.navigationBar.shadowImage = UIImage() self.navigationController?.navigationBar.translucent = true
No iOS5, você pode fazer isso para tornar a barra de navegação transparente:
fonte
[[UINavigationBar appearance] setShadowImage: [[UIImage alloc] init]];
Do IOS7:
fonte
Para quem quiser fazer isso no Swift 2.x:
ou Swift 3.x:
fonte
Isso parece funcionar:
fonte
-drawRect:
uma subclasse apropriada, não em uma categoria, e depois usá-la como sua barra de navegação.Depois de fazer o que todo mundo disse acima, ou seja:
... minha barra de navegação ainda estava branca . Então eu adicionei esta linha:
... e pronto! Isso pareceu funcionar.
fonte
Se você criar com a versão beta mais recente do iOS 13.4 e XCode 11.4, a resposta aceita não funcionará mais. Eu encontrei outra maneira, talvez seja apenas um bug no software beta, mas estou escrevendo lá em baixo, apenas no caso
(rápido 5)
fonte
Eu sei que este tópico é antigo, mas se as pessoas quiserem saber como é feito sem sobrecarregar o método drawRect.
Isto é o que você precisa:
fonte
O código abaixo se expande na resposta superior escolhida para este segmento, para se livrar da borda inferior e definir a cor do texto:
As duas últimas linhas codificadas desse código definem a transparência. Peguei emprestado esse código desse segmento e funcionou perfeitamente!
A propriedade "clipsToBounds" foi o código que encontrei que eliminou a linha de borda inferior com OR sem transparência definida (por isso, se você optar por usar um fundo branco / preto / etc. Sólido, ainda não haverá linha de borda).
A linha "tintColor" (segunda linha codificada) definiu meu botão de retorno para cinza claro
Eu mantive o barTintColor como um backup. Não sei por que a transparência não funcionaria, mas se não funcionar, quero minha BG branca como costumava tê-la.
fonte
para Swift 3.0:
fonte
Solução C # / Xamarin
fonte
Tente o seguinte trecho de código:
fonte
Outra maneira que funcionou para mim é subclassificar UINavigationBar e deixar o método drawRect vazio !!
fonte
No Swift 4.2
(em viewWillAppear) e, em seguida, em viewWillDisappear, para desfazê-lo, coloque
fonte
Você quer dizer totalmente transparente ou usar o estilo preto translúcido visto no aplicativo Fotos? O último que você pode realizar definindo sua
barStyle
propriedade paraUIBarStyleBlackTranslucent
. O primeiro ... não tenho certeza. Se você quiser que os itens ainda estejam visíveis, talvez seja necessário pesquisar na hierarquia de visualizações da barra e remover a visualização que contém seu plano de fundo.fonte
Isso funciona para o Swift 2.0.
fonte
Verifique RRViewControllerExtension , que é dedicado ao gerenciamento de aparência da barra de navegação do UIN.
com RRViewControllerExtension em seu projeto, você só precisa substituir
em você viewcontroller.
fonte
fonte