En un controlador de navegación, usted obtiene automáticamente el color correcto y la posición de una barra de navegación como se esperaba.

como este

La posición de la barra de navegación para modal de vista de iOS7

Pero en modal de vista, cuando se arrastre en la barra de navegación, se puede colocar a la derecha en la parte superior, que está muy cerca de la portadora de la batería /info.

La posición de la barra de navegación para modal de vista de iOS7

Por lo que puede arrastrar hacia abajo, de adivinar hasta qué punto para que coincida con la posición de la crea automáticamente una, pero luego tiene un color de discrepancia. He intentado cambiar la barra de estado de la configuración en IB, no hacer una diferencia.

La posición de la barra de navegación para modal de vista de iOS7

Hay una forma correcta de hacer superar esto, como en hacer un modal el aspecto de la vista como el auto genera nav vista.

Gracias

InformationsquelleAutor DogCoffee | 2013-09-11

8 Comentarios

  1. 81

    La mejor manera de superar esta en iOS 7 es conforme a la nueva UIBarPositioningDelegate protocolo.

    De conectar el delegado de su NavigationBar a la vista controlador (configurar su controlador de vista como el delegado de la barra de navegación, ya sea a través de guión gráfico o a través de código) y se ajustan a ese protocolo y por la aplicación del método

    -(UIBarPosition)positionForBar:(id<UIBarPositioning>)bar {
    return UIBarPositionTopAttached;
    }

    Puede quitar la parte superior de la brecha en el controlador de vista. Usted necesita para colocar la barra de 20 puntos por debajo del borde superior

    • Este debe tener más votos
    • Gracias @CharlieSeligman pero al ver que mi respuesta no es muy viejo, la gente podría haber visto lo suficiente, especialmente, ya que no ha sido marcado como el de la derecha.
    • me salvó un par de canas! Agradezco mucho.
    • Eres bienvenido. 😛
    • cosas buenas! He cambiado mi respuesta a la tuya, este es un lugar limpio enfoque.
    • Estoy feliz de haber ayudado. Me tomó un montón de excavación cuando el iOS7 fue lanzado.
    • ¿Qué entiende usted por «conectar el delegado de su NavigationBar a su controlador de vista»? myNavBar.delegado = auto no funciona si sólo has conformado con UIBarPositioningDelegate en su ViewController.
    • Lo he hecho de las dos maneras. Lugar de la barra de exploración en el Guión gráfico 20 puntos por debajo de la de control y arrastre el delegado del controlador de vista desde dentro del guión gráfico. O, usted podría hacer una toma de corriente y hacer myNavBar.delegado = auto desde dentro de la vista controlador y se ajustan a UIBarPositioningDelegate y poner en práctica el método. Está usted seguro de que su salida está conectada a la propiedad o si es creado por el código que se colocó a la derecha?
    • Muchas gracias por esta. He utilizado una restricción de bloqueo de la parte superior de la barra de navegación de la parte superior guía de diseño, en lugar de 20 píxeles de la parte superior de la vista del nivel. Ambos parecen funcionar cuando la barra de estado se hace más grande (CMD+Y en simulador). Cualquier desventajas para el uso de la parte superior de diseño de la guía en su lugar?
    • cuando se agrega una restricción a la barra de navegación colocado 20pts a continuación, la restricción de agregar será 0pts a la parte superior guía de diseño. No va a ser para el superview. Así que lo que hizo es exactamente cómo se supone que tienes que hacerlo. Como por defecto en iOS 8 y por encima de la barra de estado se encuentra oculta por el paisaje de teléfono.
    • Esto funcionó para mí, pero sólo para ser claros, y la respuesta de @Matt, necesita tanto el UINavigationBarDelegate y UIBarPositioningDelegate
    • Que es lo que quiero decir por «conectar el delegado de su NavigationBar». La manera más fácil es a través de storyboard, pero por supuesto puedes hacerlo en el código.

  2. 27

    Descubierto el 3 opciones para resolver este problema.

    Opción 1: cambiar el tamaño de la Barra de Navegación

    float currentVersion = 7.0;
    if ([[[UIDevice currentDevice] systemVersion] floatValue] >= currentVersion) {
        //iOS 7
        self.navBar.frame = CGRectMake(self.navBar.frame.origin.x, self.navBar.frame.origin.y, self.navBar.frame.size.width, 64);
    }
    

    Opción 2: Ocultar la Barra de Estado

    Por ejemplo, en el modal vista en la que desea ocultar la barra de estado

    Agregar este método

    - (BOOL)prefersStatusBarHidden
    {
        return YES;
    }
    

    En viewDidLoad agregar

    float currentVersion = 7.0;
    
    if ([[[UIDevice currentDevice] systemVersion] floatValue] >= currentVersion) {
        [self prefersStatusBarHidden];
        [self performSelector:@selector(setNeedsStatusBarAppearanceUpdate)];
    }
    else {
        [[UIApplication sharedApplication] setStatusBarHidden:YES withAnimation:UIStatusBarAnimationSlide];
    }
    

    Ahora, al cerrar el modal de vista, y desea que la barra de estado de la espalda. Agregar esta en viewWillAppear

        float currentVersion = 7.0;
    
    if ([[[UIDevice currentDevice] systemVersion] floatValue] >= currentVersion) {
        [self prefersStatusBarHidden];
        [self performSelector:@selector(setNeedsStatusBarAppearanceUpdate)];
        NSLog(@"ios7");
    }
    else {
        [[UIApplication sharedApplication] setStatusBarHidden:NO withAnimation:UIStatusBarAnimationSlide];
    }
    

    y este, pero NO devolver este tiempo

    - (BOOL)prefersStatusBarHidden
    {
        return NO;
    }
    

    Opción 3: Incrustar en Nav Controlador de

    Seleccione su modal de vista, al integrar en un Controlador de Navegación.

    La posición de la barra de navegación para modal de vista de iOS7

    • Yo tenía el mismo problema y he utilizado la Opción 1 de su respuesta funciona muy bien. Has encontrado otra manera de cómo se ajuste el tamaño de la navbar tal vez en el interface builder? Me estaba preguntando si la incrustación de algo en la navegación controlador genera automáticamente la barra con la correcta, entonces podría haber una manera de hacerlo, en lugar de cambiar su tamaño en cada controlador de vista.
    • he encontrado un camino en el IB. No me fijé en su segunda idea.
    • Yo creo que todo esto es un poco complicado, acaba de dar un tiro en lo que he publicado de abajo y me dan una respuesta, si usted puede. Gracias de todos modos por su solución de ideas
    • Su tercera solución funciona de maravillas para mí. Se me solucionaban dos problemas: 1 – no tener el título de botón cerca de la batería 2 – Título no desaparezca cuando me desplácese hacia abajo en la tabla, que tengo que hacer más trabajo de lo contrario, independientes de la barra de navegación no está incrustado en una nav controlador.
    • La asignación a navigationBar.marco no tiene ningún efecto.
    • He intentado la opción 3 y funcionó bien. Opción 3 aparentemente es una buena opción, ya que evita la escritura de código adicional.

  3. 5

    En Swift:

    La mejor manera de superar esta en iOS 8.1 y Swift es conforme a la nueva UIBarPositioningDelegate protocolo.

    De conectar el delegado de su NavigationBar a su controlador de vista y conforme a dicho protocolo y llamando al método:

    func positionForBar(bar: UIBarPositioning) -> UIBarPosition  {
        return UIBarPosition.TopAttached
    }
    

    Puede quitar la parte superior de la brecha en el controlador de vista. Usted necesita para colocar la barra de 20 puntos por debajo del borde superior.

    • Puede dar un ejemplo detallando cómo declarar y asignar el delegado? Estoy haciendo class ComposeViewController: UIViewController, UIBarPositioningDelegate y, a continuación,self.navigationController?.navigationBar.delegate = self. Esto no compilar desde UIBarPositioningDelegate no se ajusta a UINavigationBarDelegate.
  4. 2

    Para Swift3 usar la siguiente..

    func position(for bar: UIBarPositioning) -> UIBarPosition{
        return .topAttached;
    }
    
  5. 0

    Después de un par de intentos para mover la Barra de Navegación de unos píxeles hacia abajo en iOS 7, esto es lo que finalmente se trabajó para mí:

    -(void)viewWillLayoutSubviews
    {
        float iosVersion = 7.0;
        if ([[[UIDevice currentDevice] systemVersion] floatValue] >= iosVersion) {
            //iOS 7+
            CGRect viewFrame = self.view.frame;
            viewFrame.origin.y += 10;
            self.view.frame = viewFrame;
        }
    }
    

    Yo también ajustar la Barra de Estado de color para que coincida mejor con mi contenido:

    -(UIStatusBarStyle)preferredStatusBarStyle{
        return UIStatusBarStyleLightContent;
    }
    
  6. 0

    He creado un Controlador de Navegación, se elimina la «Raíz de Controlador de Vista» que apareció con ella.
    A continuación, mantenga presionada la tecla ctrl y arrastre el «Controlador de Navegación» en su punto de Vista (eliminar la barra de navegación agregó manualmente antes).
    Configurar el Controlador de Navegación como «Inicial del Controlador de Vista» y funciona muy bien para mí ahora.

  7. 0

    isTranslucent está configurado por defecto para true. Ajuste a false extenderá la barra de navegación debajo de la barra de estado.

    navigationBar.isTranslucent = false

  8. -6

    Me volví «Uso Autodiseño» apaga y trabajó para mí.

    • El uso de Autodiseño no es el problema aquí. Creo que la gente quiere usar Autodiseño Y resolver este problema, así que lo siento por downvote pero su respuesta no es útil

Dejar respuesta

Please enter your comment!
Please enter your name here