Pregunta

Tengo una subclase de UIViewController que maneja una UIView. El viewcontroller se presenta modalmente (se desliza hacia arriba desde la parte inferior de la pantalla). En la parte superior de la vista, he agregado una barra de navegación. Tenga en cuenta que esta barra no es manejada por un controlador de navegació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 es manejada por un UINavigationController). Sin embargo, no puedo establecer su máscara de tamaño automático en altura flexible en IB, y hacerlo en código hace que la barra de navegación desaparezca por completo.

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

P.S. Preferiría no tener que recurrir a una transformación de escala, ya que esto dañaría el texto en el título.

EDITAR: lo resolví con un poco de ayuda, lea la respuesta publicada a continuación.

¿Fue útil?

Solución 2

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 tamaño automático de la barra de navegación. El crédito se debe al usuario RayNewbie en este hilo, que me señaló la solución:

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

Otros consejos

En lugar de configurar su máscara de tamaño automático, ¿por qué no 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 ...
}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top