2009-12-01 18 views
7

Tengo una subclase de UIViewController que maneja una UIView. El viewcontroller se presenta de forma modal (se desliza hacia arriba desde la parte inferior de la pantalla). En la parte superior de la vista, agregué una barra de navegación. Tenga en cuenta que esta barra no es manejada por un controlador de navegación.Cambio de tamaño de UINavigationBar en la rotación

Quiero que la barra de navegación se reduzca en altura cuando la vista gira a horizontal (similar a cómo se comporta cuando se maneja con un UINavigationController). Sin embargo, no puedo configurar su máscara de aumento a la altura flexible en IB, y hacerlo en el código hace que la barra de navegación desaparezca por completo.

¿Hay alguna manera de hacerlo? ¿Cómo lo hace el UINavigationController?

P.S. Preferiría no tener que recurrir a una transformación de escalado, ya que esto arruinaría el texto en el título.

EDIT: Lo solucioné con un poco de ayuda, lea la respuesta publicada a continuación.

Respuesta

1

Encontré la solución, y en retrospectiva me siento bastante estúpido. Solo tenía que incluir un margen inferior flexible en la máscara de aumento de tamaño de la barra de navegación. El crédito es debido a RayNewbie usuario en este hilo, que me señaló a la solución:

http://discussions.apple.com/thread.jspa?messageID=8295525

+0

Hola, ¿tienes botones en la barra de navegación? Porque tengo el mismo problema y, si incluyo margen inferior flexible en la máscara de aumento automático de la barra de navegación, la barra de navegación cambia de tamaño, pero los botones no. – Sefran2

+0

asegúrese de agregar navBar.autoresizesSubviews = YES ;, y es posible que también deba configurar las mascaras de autoresizing para los botones de su barra de navegación –

+1

¿Publicaría su solución? El enlace que ha proporcionado está roto. – DCorrigan

5

En lugar de configurar su máscara de aumento automático, ¿por qué no solo verifica la orientación actual en viewWillAppear, así como en didRotateFromInterfaceOrientation, y establece el marco apropiado?

- (void) updateNavBar { 
    UIInterfaceOrientation orientation = [[UIApplication sharedApplication] statusBarOrientation]; 
    if ((UIInterfaceOrientationLandscapeLeft == orientation) || 
     (UIInterfaceOrientationLandscapeRight == orientation)) { 
     myNavBar.frame = CGRectMake(0, 0, 480, 34); 
    } else { 
     myNavBar.frame = CGRectMake(0, 0, 320, 44); 
    } 
} 
- (void) viewWillAppear { 
    [self updateNavBar]; 
    // ... SNIP ... 
} 
- (void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation { 
    [self updateNavBar]; 
    // ... SNIP ... 
} 
+0

que decidimos probarlo, pero no se comportan de la manera que quería. más específicamente, los elementos del botón de la barra y el título no se escalaron, por lo que la parte superior se salió de la pantalla. Además, la barra de navegación en sí no se escalaba, por lo que el gradiente estaba apagado. Trataré de hacer un cambio de tamaño manual de la subvista y veré si funciona ... –

+0

Intenté usar transformaciones de diferentes tipos en la subvista, pero no pude ver bien. –

Cuestiones relacionadas