2011-03-07 16 views
15

De las Directrices de interfaz humana iOS, iOS UI Element Usage GuidelinesUIToolbar altura en la rotación dispositivo

En el iPhone, tiene en cuenta la cambio automático en la barra de herramientas de altura que se produce en la rotación dispositivo. En en particular, asegúrese de que sus iconos personalizados de la barra de herramientas encajen bien en la barra más delgada que aparece en la orientación del paisaje . No especifique la altura de una barra de herramientas mediante programación.

puedo ver la altura cambia de 44 puntos a 32 puntos en correo, Twitter para iPhone y Dropbox por ejemplo, pero cuando agrego una barra de herramientas (con Interface Builder) y tener mi UIViewController subclase para girar automáticamente (shouldAutorotateToInterfaceOrientation: devuelve SÍ), la barra de herramientas no cambia automáticamente su altura en la rotación del dispositivo.

El UIToolbar Class Reference no menciona este cambio automático de altura, por lo que se supone que voy a cambiar mediante programación a pesar de que la HIG dice no especifica la altura de una barra de herramientas mediante programación?

Respuesta

15

Como señaló yonel y George en los comentarios de 7KV7 respuesta, el cambio de la máscara de tamaño automático no funciona según lo previsto en iOS 5.

he encontrado otra solución mediante el método -[UIView sizeThatFits:]. Aquí es cómo lo hice:

- (void) layoutForInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation 
{ 
    // Adjust the toolbar height depending on the screen orientation 
    CGSize toolbarSize = [self.toolbar sizeThatFits:self.view.bounds.size]; 
    self.toolbar.frame = (CGRect){CGPointMake(0.f, CGRectGetHeight(self.view.bounds) - toolbarSize.height), toolbarSize}; 
    self.webView.frame = (CGRect){CGPointZero, CGSizeMake(CGRectGetWidth(self.view.bounds), CGRectGetMinY(self.toolbar.frame))}; 
} 

Entonces llama a este método layoutForInterfaceOrientation: en mi controlador de vista viewWillAppear: y willAnimateRotationToInterfaceOrientation:duration: métodos.

Sin embargo, la altura se cambia mediante programación, pero al menos el valor no está codificado.

19

¿Revisó la propiedad de cambio de tamaño automático de la barra de herramientas?

+11

Eso es todo, usted tiene que hacer 'toolbar.autoresizingMask = toolbar.autoresizingMask | UIViewAutoresizingFlexibleHeight; 'programmatically como Interface Builder no le permite cambiar la altura flexible! – 0xced

+0

Pls acepta la respuesta si te ayudó. Happy coding :) – visakh7

+2

¿No tiene un efecto secundario con iOS5.0 con esta solución? Funciona bien, pero los iconos en la barra de herramientas siempre tienen el tamaño de paisaje (= más pequeño), incluso en vertical:/ – yonel

2

Si utiliza un ViewController dentro de un NavigationController, puede usar la barra de herramientas de NavigationController en lugar de crear la suya propia, y dejar que se encargue del cambio de tamaño. Esto es para lo que es realmente la propiedad toolbarItems de ViewController.

+1

Conozco esta solución, pero cuando presionas el controlador de vista B para ver el controlador A, si A no quiere una barra de herramientas y B quiere una barra de herramientas, no puede obtener una buena animación horizontal * push *. La animación de la barra de herramientas es vertical, mientras que la animación de transición de inserción es horizontal, por lo que parece incómodo en mi opinión. No animar la barra de herramientas es aún peor. – 0xced

12

Este comportamiento es mucho más simple de lograr con el diseño automático. Sólo he probado en iOS8 pero el siguiente código funciona para mí con la animación deseada sobre el cambio de orientación:

public override func viewWillLayoutSubviews() { 
    super.viewWillLayoutSubviews() 
    toolbar.invalidateIntrinsicContentSize() 
} 
+0

Funciona muy bien en iOS 9. –

+0

Esto casi funcionó, tuve que agregar toolbar.sizeToFit() después de invalidateIntrinsicContentSize(); – C0C0AL0C0

Cuestiones relacionadas