7

Je travaille sur une application iPhone qui fonctionne dans les deux orientations: portrait et paysage.iPhone: UINavigationBar avec boutons - ajuster la hauteur

J'utilise pour une vue et tableview incorporé dans un UINavigationController. La hauteur de cette barre de navigation avec ses boutons est: 44px portrait ou 34px landscape.

Dans une vue différente, j'ai créé le UINavigationBar par moi-même et je suis en mesure de définir le cadre pour la taille correcte, mais le UINavigationItem intégré avec UIBarButtonItem ne rétrécit pas. Donc pour les 34 px en mode paysage ce bouton est trop grand et chevauche la barre de navigation en hauteur. La chose amusante est cependant, que cela a fonctionné avec le code identique dans d'autres applications ... n'ont aucune idée de ce qu'il n'est pas ici.

Est-il possible d'ajuster la hauteur/position d'un UIBarButtonItem?

Voici l'extrait de code:

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

Merci

Tom

Répondre

0

Créer d'autres images, et dans les méthodes de contrôleur de vue qui gèrent animant la rotation, changer la des images dans les éléments du bouton. Vous pouvez également utiliser un UIImageView en tant que vue personnalisée dans votre élément et définir son mode de contenu pour redimensionner l'image.

7

Je l'ai compris: La hauteur de la barre de navigation doit être de 32 px! Avec 33 ou 34 px, l'alignement se visse.

+0

Très utile, merci. 32px était la clé. J'utilisais 34px et ça ne marchait pas. – lambmj

4

Voici le code que j'ai écrit basé sur la réponse 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]; 
} 
Questions connexes