Allineamento degli elementi UIToolBar


112

Ne ho UIBarButtonItemcreati tre come di seguito. Si allineano a sinistra e mi piacerebbe allineare il centro in modo che non ci sia uno spazio sul lato destro. Non vedo una proprietà di allineamento su UIToolBar. C'è un altro modo per farlo?

//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];

Risposte:


259

Aggiungi due elementi UIBarButtonSystemItemForrectSpace alla barra degli strumenti, a sinistra ea destra degli elementi

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

L'aggiunta di questi come faresti con qualsiasi altro elemento della barra degli strumenti distribuirà lo spazio in modo uniforme tra i due.


25
Non c'è un vero motivo per creare più spazi flessibili. Puoi aggiungere più volte lo stesso oggetto spazio flessibile multiplo alla barra degli strumenti se ne hai bisogno più di uno.
mmc

mmc è corretto. In effetti, sarebbe probabilmente perfettamente ragionevole creare uno spazio flessibile singleton e riutilizzarlo in tutto il prodotto. Ho sentito dire che questo era il vero uso originale dei singleton: non per far rispettare le regole del programma, ma per ridurre il sovraccarico.
Amagrammer

2
Hai dimenticato di aggiornare la chiamata di rilascio, dovrebbe leggere [flexibleSpace release];
Daniel Hepper,

Sì, mi dispiace, leggeva [release flexibleSpaceLeft] invece di [release flexibleSpace].
Errore di battitura

30

Questo può anche essere fatto direttamente da uno storyboard.

Basta trascinare e rilasciare gli elementi nella barra degli strumenti e trasformarne alcuni in uno spazio flessibile o fisso per ottenere l'effetto desiderato. Vedi i due esempi di seguito.

Distanziati uniformemente

centrato


8

In Xamarin iOS

Allineato a destra:

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

Allineato al Centro:

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

5
Questo non è l'argomento. Stiamo parlando di iOS puro qui.
jturolla

4
Qual è l'obiettivo di MonoTouch.
Herman Schoenfeld

2
Domanda obiettivo C non MonoTouch / C #
Max MacLeod

6
@MaxMacLeod: non è etichettato obj-c, è etichettato iPhone. Quindi la mia risposta è valida. È anche utile contrastare c # vs obj-c. Chiaramente, c # è moderno, più sottile, più bello, più veloce e superiore in ogni modo.
Herman Schoenfeld

12
Sebbene fosse chiaro che il codice nella domanda era Objective-C, ho trovato utile questa risposta. Anche in Google è una domanda di alto livello.
jacob.toye

7

Versione rapida:

    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]
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.