7

Estoy trabajando en una aplicación de iPhone que funciona en ambas orientaciones: vertical y horizontal.iPhone: UINavigationBar con botones: ajuste la altura

Estoy utilizando para una vista y vista de tabla incrustado en un UINavigationController. La altura de esta barra de navegación con sus botones es: retrato de 44 píxeles o paisaje de 34 píxeles.

En una vista diferente, creé UINavigationBar por mí mismo y puedo establecer el marco para el tamaño correcto, pero el UINavigationItem incrustado con UIBarButtonItem no se contrae. Entonces, para los 34 px en el modo horizontal, este botón es grande y se solapa con la barra de navegación en la altura.

Lo curioso es sin embargo, que esto funcionó con código idéntico en otras aplicaciones ... no tengo idea de cuál no es aquí.

¿Hay alguna forma de ajustar la altura/posición de un UIBarButtonItem?

Aquí es el fragmento de código:

navBar = [[UINavigationBar alloc] initWithFrame: CGRectMake(0.0f, 0.0f, 320.0f, 34.0f)]; 
[navBar setBarStyle: UIBarStyleBlackOpaque]; 

[self addSubview: navBar]; 

barButton = [[UIBarButtonItem alloc] initWithTitle: NSLocalizedString(@"flip", @"flip") style:UIBarButtonItemStylePlain target:self action:@selector(flip)]; 

item = [[UINavigationItem alloc] initWithTitle: NSLocalizedString(@"Translation", @"Translation Tab Bar Title")]; 
[item setRightBarButtonItem: barButton]; 
[navBar pushNavigationItem:item animated:NO]; 

alt text http://labs.kiesl.eu/images/navbar.png

Gracias

Tom

Respuesta

0

crear imágenes alternativas, y en los métodos de controlador de vista que se encargan de la animación de la rotación, cambiar la imágenes en los elementos del botón de la barra. O probablemente podría usar un UIImageView como vista personalizada en su artículo, y establecer su modo de contenido para escalar la imagen.

7

Lo descubrí: ¡la altura de la barra de navegación debe ser de 32 px! Con 33 o 34 px la alineación se estropea.

+0

muy útil, gracias. 32px fue la clave. Estaba usando 34px y no funcionó. – lambmj

4

Aquí está el código que escribió basándose en la respuesta de crashtesttommy:

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation { 
    return YES; 
} 

- (void) correctNavBarHeightForOrientation:(UIInterfaceOrientation)orientation { 
    // This is only needed in on the iPhone, since this is a universal app, check that first. 
    if ([UIDevice currentDevice].userInterfaceIdiom == UIUserInterfaceIdiomPhone){ 
     if (UIInterfaceOrientationIsLandscape(orientation)) { 
      self.navBar.frame = CGRectMake(self.navBar.frame.origin.x, self.navBar.frame.origin.y, self.navBar.frame.size.width, 32.0f); 
     } else { 
      self.navBar.frame = CGRectMake(self.navBar.frame.origin.x, self.navBar.frame.origin.y, self.navBar.frame.size.width, 44.0f); 
     } 
    } 
} 

- (void) viewWillAppear:(BOOL)animated { 
    [self correctNavBarHeightForOrientation:[UIApplication sharedApplication].statusBarOrientation]; 
} 

- (void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration { 
    [self correctNavBarHeightForOrientation:toInterfaceOrientation]; 
} 
Cuestiones relacionadas