Ocultar barra de guias no aplicativo IOS Swift

89

Estou tentando descobrir como ocultar a barra de guias no meu aplicativo iOS swift. Não me importo com animações extravagantes nem nada. Apenas algo que posso colocar na função ViewDidLoad ().

Robert
fonte
Defina isso antes de empurrar o VC. vc.hidesBottomBarWhenPushed = truedeve fazer o trabalho. NÃO mostre nem oculte manualmente a barra de guias.
abhimuralidharan

Respostas:

207

Você pode simplesmente usar isso em seu ViewDidLoad()método.

self.tabBarController?.tabBar.hidden = true

Para Swift 3.0, 4.0, 5.0 :

self.tabBarController?.tabBar.isHidden = true

Ou você pode alterar a posição z da barra de guias desta forma:

self.tabBarController?.tabBar.layer.zPosition = -1

e se você quiser mostrá-lo novamente:

self.tabBarController?.tabBar.layer.zPosition = 0
Dharmesh Kheni
fonte
13
Dharmesh, obrigado pela resposta. Isso oculta com sucesso a barra de guias, mas a visualização da tabela não preenche a tela. É apenas preto onde deveria estar a barra de guias. Acho que há outra etapa para fazê-lo caber na tela?
Robert
3
Adicione restrições para isso.
Dharmesh Kheni
2
Quais são as "restrições" a serem adicionadas?
db0
Se você usou restrições, pode alterar a restrição de altura para isso ou pode alterar o quadro de tableView. @ db0
Dharmesh Kheni
5
Mas a barra de guias ainda suportaria o toque, tente tocar perto de qualquer guia da barra de guias invisível. @DharmeshKheni
C
138

A resposta aceita funciona, mas a transição para outra visualização tem uma animação instável (a guia Barra de animação)

Também queria adicionar, embora a solução de Kalpesh funcionasse perfeitamente para mim, descobri que todo controlador de visualização tem um atributo para hidesBottomBarWhenPushed (confira o storyboard.) Se você deseja ocultar a barra de guias, deve marcar isso. E funcionaria muito bem.

insira a descrição da imagem aqui

Atualização: não tenho certeza se isso é uma coisa conhecida, mas aqui está o que a página de documentação da apple diz:

Um controlador de visualização adicionado como filho de um controlador de navegação pode exibir uma barra de ferramentas opcional na parte inferior da tela. O valor desta propriedade no controlador de visualização superior determina se a barra de ferramentas está visível. Se o valor desta propriedade for verdadeiro, a barra de ferramentas ficará oculta. Se o valor desta propriedade for falso, a barra fica visível.

Acho que isso significa que você deve definir o valor básico de hidesBottomBarWhenPushed no controlador de exibição superior (o primeiro na pilha de navegação). Depois de definir isso como verdadeiro, você pode alterar para falso ou verdadeiro para os outros controladores de exibição no pilha. Mas, se o valor hidesBottomBarWhenPushed de seu controlador de visualização superior for false, ele não mostrará uma barra de guias para outros controladores na pilha de navegação.

Akshansh Thakur
fonte
2
isso é o que devemos fazer. Muito melhor do que outras respostas se você quiser apenas escondê-lo enquanto apresenta o ViewController
Gabriel Goncalves
por que isso não funciona no Swift 4 ?? Já marquei a opção, mas ela ainda aparece quando vou para aquele controlador de visualização específico
ken
Isso também oculta a barra de guias para quaisquer controladores de visualização que sejam adicionados à pilha depois disso. Existe uma maneira de trazê-lo de volta para os controladores de visualização subsequentes?
Justin Vallely
@JustinVallely Por favor, deixe-me saber se a atualização funciona na resposta
Akshansh Thakur
1
Obrigado, a resposta aceita teve um problema para mim, quando voltei para a vista de onde estava vindo, o Tabbar para aquela também sumiu!
Abed Naseri
79

Antes de push set controller.hidesBottomBarWhenPushed = true

let objCreateEventVC = CreateEventVC()
objCreateEventVC.hidesBottomBarWhenPushed = true
self.navigationController?.pushViewController(objCreateEventVC, animated: false)
Kalpesh Jetani
fonte
27

Não há necessidade de definir a propriedade isHidden de tabBar.

Simplesmente, vá para ViewController (no StoryBoard) -> Inspetor de atributos -> Na seção 'View Controller' selecione a caixa de seleção 'Hide Bottom Bar on Push'. Isso funciona como um encanto.

Se você seguir o caminho 'isHidden', precisará fazer um monte de manuseio, ou seja, fazer com que apareça novamente quando você voltar e também remover o espaço vazio inferior depois de esconder a tabBar.

Tejas
fonte
3
Esta deve ser a resposta real. Isso me permitiu definir as restrições para meus elementos de interface do usuário sem qualquer aborrecimento.
Karthik Kannan
2
Hide Bottom Bar on Pushtem uma animação desagradável, imo.
Teodor Ciuraru
Quando você volta desta página, Tabbar congela um pouco e volta. Qual você acha que é o motivo?
Yunus T.
3

Swift 3.

self.tabBarController?.tabBar.isHidden = true
Ronny Kibet
fonte
3

Você também pode configurá-lo na extensão (use a resposta Dharmesh Kheni)

extension UITabBar {
func tabsVisiblty(_ isVisiblty: Bool = true){
    if isVisiblty {
        self.isHidden = false
        self.layer.zPosition = 0
    } else {
        self.isHidden = true
        self.layer.zPosition = -1
    }
}
Yair Hadad
fonte
2

Esta é a maneira programática para Swift 4.0, 4.1, 4.2, 5.0 e posterior >:

tabBarController?.hidesBottomBarWhenPushed = true

ou

hidesBottomBarWhenPushed = true
J. Doe
fonte
@NicoS. Verdade. Onde na pergunta / resposta você lê algo sobre uma barra de ferramentas?
J. Doe,
Da documentação: Um valor booleano que indica se a barra de ferramentas na parte inferior da tela está oculta quando o controlador de visualização é colocado em um controlador de navegação.
Nico S.
1
A questão é sobre o TabBar, não o ToolBar
Nico S.
@NicoS. é a mesma coisa nessa situação ... rs. É claro que você nem se preocupou em experimentar.
J. Doe,
1
o primeiro não funciona, o segundo deve ser adicionado ao executar uma segue ou antes de empurrar o controlador de visualização.
Gal Shahar
1

Para ocultar a NavigationBar e a tabBar, uso a próxima função:

var tabBarHeight : CGFloat!

func fullScreenAction(){
    if navigationController?.isNavigationBarHidden ?? false {
        //Show navigationBar
        navigationController?.setNavigationBarHidden(false, animated: false)

        //Show tabBar
        tabBarController?.tabBar.isHidden = false
        //Update the height of tabBar
        if (!(tabBarController?.tabBar.frame.size.height.isEqual(to: 0))!) {
            tabBarHeight = self.tabBarController?.tabBar.frame.size.height
        }
        tabBarController?.tabBar.frame.size.height   = tabBarHeight
    } else {
        //Hide navigationBar
        navigationController?.setNavigationBarHidden(true, animated: false)

        //Hide tabBar
        tabBarController?.tabBar.isHidden = true
        //Update the height of tabBar
        tabBarHeight = tabBarController?.tabBar.frame.size.height
        tabBarController?.tabBar.frame.size.height   = 0

    }

}

Quando a orientação da tela mudou, a altura da barra de tabulação também mudou, então eu uso a próxima função para sair da tela inteira e redimensionar a altura:

override func viewWillTransition(to size: CGSize, with coordinator: UIViewControllerTransitionCoordinator) {
    super.viewWillTransition(to: size, with: coordinator)
    if navigationController?.isNavigationBarHidden ?? false {
        navigationController?.setNavigationBarHidden(false, animated: false)
        tabBarController?.tabBar.isHidden = false
    }
}

Espero que seja útil para você.

Alberto
fonte