Alignement des éléments UIToolBar

112

J'en ai trois UIBarButtonItemcréés comme ci-dessous. Ils s'alignent à gauche et j'aimerais aligner le centre pour qu'il n'y ait pas d'espace sur le côté droit. Je ne vois pas de propriété align sur UIToolBar. Y a-t-il une autre façon d'accomplir cela?

//create some buttons
UIBarButtonItem *aboutButton = [[UIBarButtonItem alloc] initWithTitle:@"About" style:UIBarButtonItemStyleBordered target:self action:@selector(showAbout:)];
[toolbar setItems:[NSArray arrayWithObjects:settingsButton,deleteButton,aboutButton,nil]];
//Add the toolbar as a subview to the navigation controller.
[self.navigationController.view addSubview:toolbar];
4e espace
la source

Réponses:

259

Ajoutez deux éléments UIBarButtonSystemItemFlexibleSpace à votre barre d'outils, à gauche et à droite de vos éléments

UIBarButtonItem *flexibleSpace = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:nil action:nil];
[toolbar setItems:[NSArray arrayWithObjects:flexibleSpace, settingsButton,deleteButton,aboutButton, flexibleSpace, nil]];

Les ajouter comme vous le feriez pour tout autre élément de la barre d'outils répartira l'espace uniformément entre les deux.

nduplessis
la source
25
Il n'y a aucune vraie raison de créer plusieurs espaces flexibles. Vous pouvez ajouter plusieurs fois le même objet d'espace flexible à votre barre d'outils si vous en avez besoin de plusieurs.
mmc
mmc est correct. En fait, il serait probablement parfaitement raisonnable de créer un unique flexibleSpace et de le réutiliser dans tout votre produit. J'ai entendu dire que c'était la véritable utilisation originale des singletons: non pas pour appliquer les règles du programme, mais pour réduire les frais généraux.
Amagrammer
2
Vous avez oublié de mettre à jour l'appel de version, vous devriez lire [version flexibleSpace];
Daniel Hepper
Ouais, désolé, il lisait [version flexibleSpaceLeft] au lieu de [version flexibleSpace]. Typo fixed
nduplessis
30

Cela peut également être fait directement à partir d'un storyboard.

Faites simplement glisser et déposez des éléments dans la barre d'outils et transformez certains d'entre eux en un espace flexible ou fixe pour obtenir l'effet souhaité. Voir les deux exemples ci-dessous.

Régulièrement espacés

Centré

Arnaud
la source
8

Dans Xamarin iOS

Aligné à droite:

yourBar.SetItems(new [] { new UIBarButtonItem(UIBarButtonSystemItem.FlexibleSpace), yourButton }, false);

Aligné au centre:

var flexibleSpace = new UIBarButtonItem(UIBarButtonSystemItem.FlexibleSpace);
yourBar.SetItems(new [] { flexibleSpace, yourButton, flexibleSpace}, false);
Herman Schoenfeld
la source
5
Ce n'est pas le sujet. Nous parlons ici d'iOS pur.
jturolla
4
C'est ce que vise MonoTouch.
Herman Schoenfeld
2
Question Objectif C pas MonoTouch / C #
Max MacLeod
6
@MaxMacLeod: il n'est pas étiqueté obj-c, il est étiqueté iPhone. Ma réponse est donc valable. Il est également bon de comparer c # et obj-c. Clairement, c # est moderne, plus mince, plus agréable, plus rapide et supérieur à tous points de vue.
Herman Schoenfeld
12
Bien qu'il ait pu être clair que le code de la question était Objective-C, j'ai trouvé cette réponse utile. C'est aussi une question de haut niveau dans Google.
jacob.toye
7

Version Swift:

    let toolbar = UIToolbar(frame: CGRectMake(0, 0, viewController.view.frame.size.width, 35.0))
    let flexibleSpace = UIBarButtonItem(barButtonSystemItem: UIBarButtonSystemItem.FlexibleSpace, target: viewController, action: nil)
    let button1 = UIBarButtonItem(title: "A", style: UIBarButtonItemStyle.Plain, target: viewController, action: foo)
    let button2 = UIBarButtonItem(title: "B", style: UIBarButtonItemStyle.Plain, target: viewController, action: bar)
    let button3 = UIBarButtonItem(title: "C", style: UIBarButtonItemStyle.Plain, target: viewController, action: blah)
    toolbar.items = [button1, flexibleSpace, button2, flexibleSpace, button3]
rgamber
la source