¿UINavigationController sin barra de navegación?

117

Tengo una aplicación universal y en la versión para iPad que estoy usando UISplitViewControllerpara crear una interfaz similar a la aplicación Mail.

Tenía problemas para impulsar nuevas vistas de detalle, así que decidí usar una UINavigationControllerpara poder presionar y mostrar vistas según fuera necesario. Sin embargo, no quiero usar la vista de navegación ni una barra de herramientas. Pero no importa lo que haga, no puedo ocultar la barra de navegación.

Intenté desmarcar "Muestra la barra de navegación" en IB, y también intenté configurar:

[self.navigationController setNavigationBarHidden:YES];

en el viewDidLoad/ viewDidAppear/ viewWillAppear. También lo he probado en cada una de las vistas que se enviarán. Nada funciona.

¿Hay algo que me falta aquí? ¿Es posible tener un UINavigationControllersin barra de herramientas o barra de navegación?

DOOManiac
fuente
¿De qué es selfuna instancia la superclase de la clase ?

Respuestas:

192

Debería poder hacer lo siguiente:

self.navigationController.navigationBar.isHidden = true //Swift 5

donde self.navigationController es (obviamente) una instancia de UINavigationController. Parece funcionar para mí, pero solo lo probé brevemente antes de publicar esto.

Ashwin
fuente
2
Entonces, en su caso, self.navigationController.navigationBar.hidden = YES;
Ashwin
4
¡Eso fue todo! Aunque agregaré que simplemente pude marcar la casilla Oculto para la barra de herramientas Nagivation en IB en lugar de hacerlo a través del código. ¡Gracias!
DOOManiac
1
Sí, lo siento por eso. Debería haberme dado cuenta del hecho de que estaba usando IB y mencionar el cuadro Oculto en lugar de usar código. Recientemente, he estado en una patada de crear todas mis interfaces completamente mediante programación sin archivos .xib, así que fui directamente a eso para mi respuesta.
Ashwin
5
Llamo a esto está en viewwillapear en mi controlador de vista así - (void)viewWillAppear:(BOOL)animated { self.navigationController.navigationBar.hidden = YES; } y funciona
Ali
2
La barra de navegación está oculta, pero la pantalla del controlador de vista no se expande a la pantalla completa
ArdenDev
40

Si no desea una barra de navegación y desea que el contenido se ajuste hasta donde estaría normalmente la barra de navegación, debe usar

self.navigationController.navigationBarHidden = YES;

Esto le da un resultado como este:

ingrese la descripción de la imagen aquí

Considerando que self.navigationController.navigationBar.hidden = YES;le da un espacio donde debería estar la barra de navegación. Me gusta esto:

ingrese la descripción de la imagen aquí

HalR
fuente
Muy buena distinción en la diferencia de resultados con iOS 6. A partir de IOS 7, parece que el espacio se eliminó, pero esperaré a que más personas verifiquen que ese es el caso.
Alex Zavatone
39

En Xcode 4.3.2:

  1. Seleccione el controlador de navegación en el guión gráfico.
  2. Seleccione el Inspector de atributos en el panel Utilidades (a la derecha)
  3. En la categoría Controlador de navegación, tiene dos casillas de verificación:

    [] Muestra la barra de navegación

    [] Muestra la barra de herramientas

Trabajó para mi...

Avner
fuente
8

Rápido 4

Lo escondo a la vista, aparecerá

     override func viewWillAppear(_ animated: Bool) {
        super.viewWillAppear(animated)

        self.navigationController?.isNavigationBarHidden = true;
    }

Luego, puede volver a colocarlo cuando presione un segue (si desea tener el botón de retroceso en la siguiente vista)

     override func prepare(for segue: UIStoryboardSegue, sender: Any?) 
     {
        self.navigationController?.isNavigationBarHidden = false;
     }
usuario1296082
fuente
3

Swift 3 mediante programación

self.navigationController.isNavigationBarHidden = true

o

self.navigationController.navigationBar.isHidden = true

Nota: No vi una diferencia entre estas dos pruebas de enfoques en iOS 10.

Dan móvil
fuente
1

Todas estas respuestas aún dejan un espacio en la parte superior para la barra de estado; agregue esta línea para eliminar eso también:

navController.navigationBar.isHidden = true
navController.accessibilityFrame = CGRect.zero
Cbas
fuente