Ocultar barra de pestañas en la aplicación IOS Swift

91

Estoy tratando de descubrir cómo ocultar la barra de pestañas en mi aplicación rápida de iOS. No me importan las animaciones extravagantes ni nada. Solo algo que puedo poner en la función ViewDidLoad ().

Robert
fuente
Configure esto antes de presionar el VC. vc.hidesBottomBarWhenPushed = truedebería hacer el trabajo. NO muestre ni oculte manualmente la barra de pestañas.
abhimuralidharan

Respuestas:

213

Simplemente puede usar esto en su ViewDidLoad()método.

self.tabBarController?.tabBar.hidden = true

Para Swift 3.0, 4.0, 5.0 :

self.tabBarController?.tabBar.isHidden = true

O puede cambiar la posición z de la barra de pestañas de esta manera:

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

y si quieres volver a mostrarlo entonces:

self.tabBarController?.tabBar.layer.zPosition = 0
Dharmesh Kheni
fuente
14
Dharmesh, gracias por la respuesta. Esto oculta correctamente la barra de pestañas, pero la vista de tabla no llena la pantalla. Es simplemente negro donde debería estar la barra de pestañas. ¿Supongo que hay otro paso para que se ajuste a la pantalla?
Robert
3
Agregue restricciones para eso.
Dharmesh Kheni
2
¿Cuáles son las "restricciones" para agregar?
db0
Si usó restricciones, puede cambiar la restricción de altura para eso o puede cambiar el marco de tableView. @ db0
Dharmesh Kheni
5
Pero la barra de pestañas aún tomaría el toque, intente tocar cerca de cualquier pestaña de la barra de pestañas invisible. @DharmeshKheni
Shobhit C
140

La respuesta aceptada funciona, pero la transición a otra vista tiene una animación entrecortada (la animación de la barra de pestañas)

También quería agregar, aunque la solución de Kalpesh funcionó perfectamente para mí, descubrí que cada controlador de vista tiene un atributo para hidesBottomBarWhenPushed (vea el guión gráfico). Si desea ocultar la barra de pestañas, debe marcar eso. Y funcionaría muy bien.

ingrese la descripción de la imagen aquí

Actualización: no estoy seguro de si esto es algo conocido, pero esto es lo que dice la página de documentación de Apple:

Un controlador de vista agregado como hijo de un controlador de navegación puede mostrar una barra de herramientas opcional en la parte inferior de la pantalla. El valor de esta propiedad en el controlador de vista superior determina si la barra de herramientas está visible. Si el valor de esta propiedad es verdadero, la barra de herramientas está oculta. Si el valor de esta propiedad es falso, la barra es visible.

Creo que esto significa que debe establecer el valor básico de hidesBottomBarWhenPushed en el controlador de vista superior (el primero en la pila de navegación). Una vez que lo haya establecido en verdadero, puede cambiar a falso o verdadero para los otros controladores de vista en el apilar. Pero, si el valor hidesBottomBarWhenPushed de su controlador de vista superior es falso, no mostrará una barra de pestañas para otros controladores en la pila de navegación.

Akshansh Thakur
fuente
2
eso es lo que debemos hacer. Mucho mejor que otras respuestas si solo desea ocultarlo mientras presenta el ViewController
Gabriel Goncalves
¿Por qué esto no funciona en Swift 4? Ya marqué la opción, pero todavía aparece cuando voy a ese controlador de vista en particular
ken
Esto también oculta la barra de pestañas para cualquier controlador de vista que se agregue a la pila después de esto. ¿Hay alguna forma de recuperarlo para los controladores de vista posteriores?
Justin Vallely
@JustinVallely Por favor, avíseme si la actualización funciona en la respuesta
Akshansh Thakur
1
Gracias, la respuesta aceptada tuvo un problema para mí, cuando volví a la vista de la que venía, la barra de pestañas para eso también desapareció
Abed Naseri
79

Antes de presionar, configure controller.hidesBottomBarWhenPushed = true

let objCreateEventVC = CreateEventVC()
objCreateEventVC.hidesBottomBarWhenPushed = true
self.navigationController?.pushViewController(objCreateEventVC, animated: false)
kalpesh jetani
fuente
No funciona cuando se agregan varios controladores consetViewControllers
KR
27

No es necesario establecer la propiedad isHidden de tabBar.

Simplemente, vaya a ViewController (en StoryBoard) -> Inspector de atributos -> En la sección 'Ver controlador' seleccione la casilla de verificación 'Ocultar barra inferior al presionar'. Esto funciona a las mil maravillas.

Si sigue el camino de 'isHidden', necesita hacer mucho manejo, es decir, hacer que vuelva a aparecer cuando regrese y también eliminar el espacio vacío inferior después de ocultar tabBar.

Tejas
fuente
3
Esta debería ser la respuesta real. Esto me permitió establecer las restricciones para mis elementos de la interfaz de usuario sin ningún problema.
Karthik Kannan
2
Hide Bottom Bar on Pushtiene una animación desagradable, en mi opinión.
Teodor Ciuraru
Cuando regresa de esta página, Tabbar se congela un poco y regresa. ¿Cuál crees que es la razón?
Yunus T.
3

Rápido 3.

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

También puede configurarlo en extensión (use la respuesta 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
fuente
2

Esta es la forma programática para Swift 4.0, 4.1, 4.2, 5.0 y posteriores >:

tabBarController?.hidesBottomBarWhenPushed = true

o

hidesBottomBarWhenPushed = true
J. Doe
fuente
@NicoS. Cierto. ¿En qué parte de la pregunta / respuesta lee algo sobre una barra de herramientas?
J. Doe
De la documentación: Un valor booleano que indica si la barra de herramientas en la parte inferior de la pantalla está oculta cuando se presiona el controlador de vista en un controlador de navegación.
Nico S.
1
La pregunta es sobre TabBar, no sobre ToolBar
Nico S.
@NicoS. es lo mismo en esta situación ... jejeje. Claramente ni siquiera te molestaste en probarlo.
J. Doe
1
el primero no funciona, el segundo debe agregarse al realizar una transición o antes de presionar el controlador de vista.
Gal Shahar
1

Para ocultar la barra de navegación y la barra de pestañas, uso la siguiente función:

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

    }

}

Cuando la orientación de la pantalla ha cambiado, la altura de la barra de pestañas también cambia, entonces uso la siguiente función para salir de la pantalla completa y cambiar el tamaño de la 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 te sea de utilidad.

Alberto
fuente