Eu tenho um aplicativo que às vezes precisa da barra de navegação para se misturar ao conteúdo.
Alguém sabe como se livrar ou mudar a cor desse barzinho chato?
Na imagem abaixo da situação que tenho - estou falando dessa linha de 1px de altura abaixo de "Root View Controller"
ios
objective-c
swift
ipad
uinavigationbar
Szymon Kuczur
fonte
fonte
Respostas:
Para iOS 13:
Use a
.shadowColor
propriedadePor exemplo:
Para iOS 12 e abaixo:
Para fazer isso, você deve definir uma imagem de sombra personalizada. Mas para que a imagem de sombra seja mostrada, você também precisa definir uma imagem de fundo personalizada, cite a documentação da Apple:
Assim:
Acima está a única maneira "oficial" de escondê-lo. Infelizmente, remove a translucidez da barra.
Não quero imagem de fundo, apenas cor
Você tem essas opções:
Cor sólida, sem translucidez:
Crie uma pequena imagem de fundo cheia de cor e use-a.
Use o método 'hacky' descrito abaixo. Também manterá a barra translúcida.
Como manter a barra translúcida?
Para manter a translucidez, você precisa de outra abordagem, parece um hack, mas funciona bem. A sombra que estamos tentando remover é uma linha fina em
UIImageView
algum lugar abaixoUINavigationBar
. Podemos encontrá-lo e ocultar / mostrar quando necessário.As instruções abaixo assumem que você precisa de uma linha fina escondida em apenas um controlador de sua
UINavigationController
hierarquia.Declarar variável de instância:
Adicione um método que encontre essa sombra (linha fina)
UIImageView:
Adicionar / editar
viewWillAppear/viewWillDisappear
métodos:O mesmo método também deve funcionar para o
UISearchBar
couro cabeludo e (quase) qualquer outra coisa que você precise ocultar :)Muito obrigado a @Leo Natan pela ideia original!
fonte
UINavigationBar
propriedade:clipsToBounds = YES
clipsToBounds = YES
funciona como um encanto! Obrigado!viewWillAppear
é chamado não podemos chegarshadowImageView
Abaixo pode ajudar simplesmente!
Rápido:
Objetivo C:
fonte
Se você deseja apenas usar uma cor sólida da barra de navegação e configurou isso no seu storyboard, use este código na sua
AppDelegate
classe para remover a borda de 1 pixel por meio do proxy de aparência:fonte
Tente o seguinte:
A imagem abaixo tem a explicação (iOS7 NavigationBar):
E verifique esta pergunta do SO: iOS7 - Alterar a cor da borda do UINavigationBar
fonte
Queria adicionar a versão Swift da resposta de Serhii. Eu criei um
UIBarExtension.swift
com o seguinte:fonte
A maneira rápida de fazer isso:
fonte
Solução simples em rápida
fonte
Depois de estudar a resposta de Serhil, criei um pod UINavigationBar + Addition que pode ocultar facilmente a linha do cabelo.
fonte
No Swift 3.0
Edite seu
AppDelegate.swift
adicionando o seguinte código à sua função de aplicativo:fonte
No iOS 13, existe uma API do sistema para definir ou remover a sombra
https://developer.apple.com/documentation/uikit/uibarappearance/3198009-shadowimage
fonte
UINavigationBarAppearance
cabeçalhos !! Eu nunca o encontraria. Obrigado, isso resolvido meus problemas de 100%Também pode ser oculto no Storyboard (trabalhando no Xcode 10.1)
Adicionando o atributo runtime: hidesShadow - Boolean - True
fonte
Solução da pxpgraphics atualizada para o Swift 2.0
fonte
UINavigationController().navigationBar/toolbar.hide/showBottomHairline()
então não? Estou tentando isso, mas sem sucesso. Não estou entendendo corretamente?Swift 4 // para ocultar a linha de sombra da barra de navegação
fonte
Uso uma extensão UINavigationBar que permite ocultar / mostrar essa sombra usando a API UIAppearance ou selecionar qual barra de navegação deve ocultar / mostrar essa sombra usando o Storyboard (ou código-fonte). Aqui está a extensão:
Agora, para desativar a sombra em todas as barras de navegação, você deve usar:
Ou você pode ativar / desativar esse comportamento usando storyboards:
fonte
flatAssociatedObjectKey
como um int exclusivo (tratado como ponteiro) para identificar seu objeto associado. Aqui é definido pelo endereço de memória de uma var privada. Eu atualizei a resposta para adicionar esta var. Consulte nshipster.com/associated-objects para obter mais informações.translucent
como falsoSwift 4 testado ONE LINE SOLUTION
No
Viewdidload()
valor definido por padrão do usuário do controlador Set Navigation true para a chave "hidesShadow"fonte
Swift colocou isso
no
fonte
Outra opção, se você deseja preservar a translucidez e não deseja subclassificar todos os
UINavigationController
aplicativos:fonte
fonte
Solução no Swift 4.2:
Basta colocar esta função no primeiro Viewcontroller e chamar
viewdidload
fonte
No iOS8, se você definir
UINavigationBar.barStyle
como,.Black
poderá definir o plano de fundo da barra como cor lisa, sem a borda.Em Swift:
fonte
Solução de duas linhas que funciona para mim. Tente adicionar isso no método ViewDidLoad:
fonte
Aqui está uma solução muito simples:
fonte
Solução simples - Swift 5
Crie uma extensão:
Adicione isto a
viewDidLoad()
:fonte
Para usuários do iOS 9, isso funcionou para mim. basta adicionar isso:
fonte
O problema de definir uma imagem de fundo é que ela remove a desfocagem. Você pode removê-lo sem definir uma imagem de fundo. Veja minha resposta aqui .
fonte
Você deve adicionar uma exibição na parte inferior da UISearchBar
fonte
Sei que esse é um tópico antigo, mas encontrei uma solução que funciona muito bem:
Subclasse UINavigationBar. Na sua subclasse UINavigationBar, substitua didAddSubview pelo seguinte código:
fonte
Acabei de criar uma extensão para isso ... Desculpe a formatação (esta é minha primeira resposta).
Uso:
Extensão:
fonte
No AppDelegate , isso mudou globalmente o formato da NavBar:
Não conseguiu implementar nada diferente em um VC específico, mas isso ajudará 90% das pessoas
fonte
fonte