Wyrównywanie elementów UIToolBar


112

Mam trzy UIBarButtonItemutworzone jak poniżej. Są wyrównane do lewej i chciałbym wyrównać do środka, aby nie było przerwy po prawej stronie. Nie widzę właściwości wyrównywania UIToolBar. Czy jest inny sposób na osiągnięcie tego?

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

Odpowiedzi:


259

Dodaj dwa elementy UIBarButtonSystemItemF flexibleSpace do paska narzędzi, po lewej i prawej stronie elementów

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

Dodanie ich tak jak innych elementów paska narzędzi spowoduje równomierne rozłożenie przestrzeni między nimi.


25
Nie ma prawdziwego powodu, aby tworzyć wiele elastycznych przestrzeni. Jeśli potrzebujesz więcej niż jednego, możesz wielokrotnie dodać ten sam wielokrotny elastyczny obiekt do paska narzędzi.
mmc

mmc jest poprawne. W rzeczywistości prawdopodobnie byłoby całkowicie rozsądne, gdyby singleton był elastyczny i ponownie używał go w całym produkcie. Słyszałem, że twierdził, że to było prawdziwe oryginalne użycie singletonów: nie do egzekwowania reguł programu, ale do zmniejszenia narzutu.
Amagrammer

2
Zapomniałeś zaktualizować wywołanie wydania, przeczytaj [wydanie flexibleSpace];
Daniel Hepper,

Tak, przepraszam, odczytano [wydanie flexibleSpaceLeft] zamiast [wydanie flexibleSpace]. Naprawiono
literówkę

30

Można to również zrobić bezpośrednio z storyboardu.

Po prostu przeciągnij i upuść elementy na pasku narzędzi i zamień niektóre z nich w elastyczną lub stałą przestrzeń, aby uzyskać pożądany efekt. Zobacz dwa przykłady poniżej.

Równomiernie rozmieszczone

Wyśrodkowany


8

W Xamarin iOS

Wyrównanie do prawej:

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

Wyśrodkowany:

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

5
To nie jest temat. Mowa tutaj o czystym iOS.
jturolla

4
I właśnie to jest celem MonoTouch.
Herman Schoenfeld

2
Cel C pytanie nie MonoTouch / C #
Max MacLeod

6
@MaxMacLeod: nie jest oznaczony jako obj-c, jest oznaczony jako iPhone. Dlatego moja odpowiedź jest ważna. Dobrze jest też porównać c # z obj-c. Oczywiście c # jest nowoczesny, smuklejszy, ładniejszy, szybszy i lepszy pod każdym względem.
Herman Schoenfeld

12
Chociaż mogło być jasne, że kod w pytaniu to Objective-C, ta odpowiedź okazała się pomocna. Jest to również ważne pytanie w Google.
jacob.toye

7

Wersja 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]
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.