63 votes

Comment ajuster le rembourrage gauche et droit de UIToolBar

J'ai créer un UIToolbar avec le code et l'autre avec interface builder. Mais, les deux de la barre d'outils différents à gauche et à droite, rembourrage qui indiqué ci-dessous:

À Partir De L'Interface Builder:

enter image description here

De Code:

enter image description here

UIImage *buttonImage = [[UIImage imageNamed:@"button.png"] stretchableImageWithLeftCapWidth:10 topCapHeight:0];
UIButton *btnTest = [UIButton buttonWithType:UIButtonTypeCustom];
[btnTest setBackgroundImage:buttonImage forState:UIControlStateNormal];
[btnTest setTitle:@"Back" forState:UIControlStateNormal];   
[btnTest.titleLabel setFont:[UIFont boldSystemFontOfSize:13]];  
[btnTest setBackgroundImage:[imgToolbarButton stretchableImageWithLeftCapWidth:5 topCapHeight:0]  forState:UIControlStateNormal];
[btnTest addTarget:self action:@selector(clearDateEdit:) forControlEvents:UIControlEventTouchUpInside];
btnTest.frame = CGRectMake(0.0, 0.0, 50, 30);
UIBarButtonItem *btnTestItem = [[UIBarButtonItem alloc] initWithCustomView:btnTest];
[self.toolbar setItems:[NSArray arrayWithObjects:btnTestItem,nil]];
[btnTestItem release];

Ma question est comment puis-je régler la gauche et la droite rembourrage de UIToolbar par le code?

Mise à jour

J'ai découvert ce problème d'alignement n'arrivent qu'aux UIBarButtonItem avec customView de UIButton, l'alignement est bien avec UIBarButtonItem. Toute idée de ce qui cause ce ou pour résoudre ce problème.

La seule solution que je pense dès maintenant à les définir manuellement l'image.

153voto

Craig Mellon Points 3499

J'ai eu le même problème, et il y a une astuce que vous pouvez faire avec un UIBarButtonSystemItemFixedSpace, ajoutez un de ceux-ci avec une largeur négative avant votre premier bouton et après votre dernier bouton et il déplacera le bouton vers le bord.

Par exemple, pour supprimer la marge de droite, ajoutez l'élément de barre FixedSpace suivant au dernier élément:

 UIBarButtonItem *negativeSeparator = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFixedSpace target:nil action:nil];
negativeSeparator.width = -12;
 

Les marges à gauche et à droite sont de 12px.

Mise à jour pour iOS7 - les marges sont de 16 pixels sur iPhone et de 20 pixels sur iPad!

3voto

Madhu Points 1163

utiliser ce bouton

 UIBarButtonItem *spaceItem = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace
                                                                           target:nil
                                                                           action:nil];
 

2voto

Fourj Points 1211

J'ai rencontré le même problème. Enfin, j'ai résolu ce problème en sous-classant UIToolbar et en remplaçant la méthode des sous-vues de présentation.

 - (void)layoutSubviews {

  [super layoutSubviews];

  if (leftItem_ && leftItem_.customView
      && [leftItem_.customView isKindOfClass:[UIButton class]]) {
    CGRect newFrame = leftItem_.customView.frame;
    newFrame.origin.x = 0;   // reset the original point x to 0; default is 12, wired number
    leftItem_.customView.frame = newFrame;    
  }

  if (rightItem_ && rightItem_.customView
      && [rightItem_.customView isKindOfClass:[UIButton class]]) {
    CGRect newFrame = rightItem_.customView.frame;
    newFrame.origin.x = self.frame.size.width - CGRectGetWidth(newFrame);
    rightItem_.customView.frame = newFrame;
  }

}
 

2voto

Mihriban Minaz Points 345

Vous pouvez modifier le décalage et la largeur de votre barre d’outils si vous souhaitez utiliser customview (initWithCustomView).

 [myToolBar setFrame:CGRectMake(-10, 0, [UIScreen mainScreen].bounds.size.width+10, 44)];
 

0voto

TonyTakeshi Points 1914

Enfin, pour avoir personnalisé l’image d’arrière-plan de UIBarButtonItem et permettre l’alignement, j’ai abandonné UIBarButtonItem et l’ajout manuel de UIButton.

 UIImage *buttonImage = [[UIImage imageNamed:@"button.png"] stretchableImageWithLeftCapWidth:10 topCapHeight:0];
UIButton *btnTest = [UIButton buttonWithType:UIButtonTypeCustom];
[btnTest setBackgroundImage:buttonImage forState:UIControlStateNormal];
[btnTest setTitle:@"Back" forState:UIControlStateNormal];   
[btnTest.titleLabel setFont:[UIFont boldSystemFontOfSize:13]];  
[btnTest setBackgroundImage:[imgToolbarButton stretchableImageWithLeftCapWidth:5 topCapHeight:0]  forState:UIControlStateNormal];
[btnTest addTarget:self action:@selector(clearDateEdit:) forControlEvents:UIControlEventTouchUpInside];
btnTest.frame = CGRectMake(0.0, 0.0, 50, 30);
[self.toolbar addSubview:btnTest];
[btnTestItem release];
 

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X