Estoy tratando de empujar a un controlador de vista con una visible de la barra de navegación de un controlador de vista con una barra de navegación oculta.

He probado todo tipo de combinaciones de [[self navigationController] setNavigationBarHidden:YES animated:NO]; en viewWillAppear, viewDidAppear, viewWillDisappear… etc.

//First View Controller

@implementation FirstViewController

- (void)viewWillAppear:(BOOL)animated {
    [super viewWillAppear:animated];
    [[self navigationController] setNavigationBarHidden:YES animated:NO];

    NSLog(@"[%@ viewWillAppear]", self);
}

@end


//Second View Controller


@implementation SecondViewController

- (void)viewWillAppear:(BOOL)animated {
    [super viewWillAppear:animated];
    [[self navigationController] setNavigationBarHidden:NO animated:NO];

    NSLog(@"[%@ viewWillAppear]", self);
}

@end

Nada funcionó. También traté de código personalizado para «animar» un push y pop, que funciona, PERO me pierde el gesto de borde y vista panorámica. Antes de profundizar más, quiero asegurarme de que no estoy reinventando la rueda.

El Starbucks app es lo que estoy tratando de imitar.

La raíz de controlador de vista de la aplicación (el fondo oscuro de vista) es la pantalla completa y aviso que no tienen un UINavigationBar. Pero cuando se presiona uno de los botones, empuja en una vista controlador (la luz de fondo de la vista) CON UINavigationBar. A partir de ahí, si se pulsa en la «vuelta» de la flecha, es controlador de vista de los cop con la barra de navegación. Interactivo pop gesto también funciona.

Push /Pop Controlador de Vista Con la Barra de Navegación de la Vista Controlador Sin Barra de Navegación

  • Es la única razón para tener la barra de navegación muestra en la 2ª vista de modo que hay un botón atrás? O son otras cosas (aparte del título/subtítulo) que necesita de la barra de navegación?
  • Definitivamente se necesita el botón atrás, pero también necesita de un funcional de navegación controlador/bar como el usuario de taladrado profundo.
  • Ahh tengo. Yo iba a decir que sólo podría agregar una vista personalizada para la parte superior con un botón que llama a popViewControllerAnimated y mantener la barra de navegación oculta. Supongo que podría, pero no sé cómo las cosas complejas se vuelven como de perforación más profunda
  • No estoy seguro de lo que su problema es, que como mencione el código para ocultar la barra de navegación, pero no el código que empujan el siguiente controlador. Se le llama pushViewController:animación:?
  • Si desea pasar sin el auto aplicado de vuelta, agregar esto a su VC. Me suelen caer en viewDidLoad: self.navigationController.interactivePopGestureRecognizer.delegate = self;
  • estoy usando pushViewController. el problema es el UINavigationBar no sigue la empujó controlador de vista. Sólo aparece arriba.
  • si puedo implementar el interactivePopGestureRecognizer delegado, puedo animar la UINavigationBar fotograma para que «pop/push» con el controlador de vista?
  • Hmm, no estoy seguro, creo que no lo hará de manera automática, aunque.
  • Sí… Parece que es el caso.

InformationsquelleAutor YarGnawh | 2014-10-14

2 Comentarios

  1. 30

    Es posible sin la piratería juntos una solución por sí mismo. Aquí está lo que debes hacer:

    Su raíz viewController:

    @implementation ViewController
    
    ....
    
    - (void)viewWillAppear:(BOOL)animated {
        [super viewWillAppear:animated];
    
        [self.navigationController setNavigationBarHidden:YES animated:animated];
    }
    
    @end

    Y la empujó viewController:

    @implementation SecondViewController
    
    - (void)viewWillAppear:(BOOL)animated {
        [super viewWillAppear:animated];
    
        [self.navigationController setNavigationBarHidden:NO animated:animated];
    }
    
    @end

    Esto va a hacer. También mantiene el interactivo de transición de trabajo 😉

    Me resulta inquietante, sin embargo, que este tipo de funcionalidad no está documentada por parte de apple. – También se puede ocultar y mostrar las barras de herramientas con estas llamadas ‘puntos’ (dentro de viewWillAppear:)

    EDITAR

    Me di cuenta de que este es el mismo código que escribió en su pregunta. Por favor, prueba de nuevo. Estoy 100% seguro de que esto funciona – he utilizado esta funcionalidad en una de mis aplicaciones.

    Por favor, también tenga en cuenta que el código hace uso de animated:animated en lugar de su animated:NO. Este puede ser el punto crucial aquí 🙂

    • «Por favor, también tenga en cuenta que el código hace uso animados:animados en lugar de la animación:NO. Este puede ser el punto crucial aquí :)» de hecho, fue el punto crucial. Gracias!
    • Pasando el animated BOOL fue el trampolín para mí. Simplemente de paso SÍ/NO causó un extraño comportamiento de la barra de navegación cuando he realizado el interactivo (arrastrar de nuevo) pop de animación.
    • Si almacena una BOOL navigationBarHidden propiedad en su UIViewController de la clase base, entonces sólo es necesario poner la propiedad a YES para viewControllers que ocultar y anular viewWillAppear llamar [self.navigationController setNavigationBarHidden:self.navigationBarHidden animated:animated];
  2. 1

    He configurado dos controladores para probar esta de vuelta y vuelta.

    @interface VC1 ()
    
    @end
    
    @implementation VC1
    
    - (void)viewDidLoad {
    [super viewDidLoad];
    }
    
    - (void)viewWillAppear:(BOOL)animated
    {
    [super viewWillAppear:animated];
    self.navigationController.navigationBarHidden = YES;
    }
    
    @end

    y un segundo

    #import "ViewControllerTwo.h"
    
    @interface ViewControllerTwo ()
    
    @end
    
    @implementation ViewControllerTwo
    
    - (void)viewDidLoad {
        [super viewDidLoad];
    }
    
    - (void)viewWillAppear:(BOOL)animated
    {
        [super viewWillAppear:animated];
        self.navigationController.navigationBarHidden = NO;
    }
    
    @end

    VC1 está incrustado en un navigationController (que es la raíz del controlador de la aplicación), con un botón que se desplaza a ViewControllerTwo. Tengo un empuje salte de VC1 -> ViewControllerTwo, este método funciona. Cuando me toque en el botón, el controlador de vista es visible en ViewControllerTwo, cuando yo presione atrás, el navigationBar se ha ido.

    • eso también fue lo que hice primero, pero creativo no dejar que la mosca. si se desliza el dedo desde la izquierda para extraer el controlador de vista, la barra de navegación desaparece inmediatamente, en lugar de seguir el controlador de vista.
    • Modo de aclaración, el problema no es que usted no puede deshacerse de la barra de navegación, es que desea que el navigationBar para animar junto a la ViewController tu apareciendo de modo que se adhieren juntos, ¿correcto?
    • Correcto. Lo siento por la confusión.
    • Te recomiendo uno de los dos enfoques. Crear su propia barra de navegación de las cajas como parte de la Vista controlador, y activar el pop y el empuje de la UINavigationController programación (forma más fácil si usted todavía está en el desarrollo temprano), o, más complejo, pero robusta, la ruta sería echar un vistazo a vista personalizada controlador de transiciones.

Dejar respuesta

Please enter your comment!
Please enter your name here