Ausrichten von UIToolBar-Elementen


112

Ich habe drei UIBarButtonItemwie unten erstellt. Sie richten sich nach links aus und ich möchte die Mitte ausrichten, damit auf der rechten Seite keine Lücke entsteht. Ich sehe keine Align-Eigenschaft für UIToolBar. Gibt es einen anderen Weg, um dies zu erreichen?

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

Antworten:


259

Fügen Sie Ihrer Symbolleiste links und rechts von Ihren Elementen zwei UIBarButtonSystemItemFlexibleSpace-Elemente hinzu

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

Wenn Sie diese wie alle anderen Symbolleistenelemente hinzufügen, wird der Platz gleichmäßig zwischen den beiden verteilt.


25
Es gibt keinen wirklichen Grund, mehrere flexible Räume zu schaffen. Sie können Ihrer Symbolleiste mehrmals dasselbe flexible Raumobjekt hinzufügen, wenn Sie mehr als ein Objekt benötigen.
mmc

mmc ist richtig. In der Tat wäre es wahrscheinlich durchaus vernünftig, einen Singleton flexibleSpace zu erstellen und ihn in Ihrem gesamten Produkt wiederzuverwenden. Ich habe gehört, dass behauptet wurde, dies sei die wahre ursprüngliche Verwendung von Singletons: nicht um Programmregeln durchzusetzen, sondern um den Overhead zu reduzieren.
Amagrammer

2
Sie haben vergessen, den Release-Aufruf zu aktualisieren. Sie sollten [flexibleSpace-Release] lesen.
Daniel Hepper

Ja, tut mir leid, es wurde [flexibleSpaceLeft-Version] anstelle von [flexibleSpace-Version] gelesen. Tippfehler behoben
nduplessis

30

Dies kann auch direkt von einem Storyboard aus erfolgen.

Ziehen Sie einfach Elemente in die Symbolleiste und legen Sie sie dort ab. Verwandeln Sie einige davon in einen flexiblen oder festen Bereich, um den gewünschten Effekt zu erzielen. Siehe die beiden folgenden Beispiele.

Gleichmäßig verteilt

Zentriert


8

In Xamarin iOS

Rechts ausgerichtet:

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

Mitte ausgerichtet:

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

5
Dies ist nicht das Thema. Wir sprechen hier von reinem iOS.
Jturolla

4
Welches ist, was MonoTouch zielt.
Herman Schönfeld

2
Ziel C Frage nicht MonoTouch / C #
Max MacLeod

6
@ MaxMacLeod: Es ist nicht mit obj-c gekennzeichnet, sondern mit dem iPhone. Daher ist meine Antwort gültig. Es ist auch gut, c # gegen obj-c zu kontrastieren. C # ist eindeutig modern, schlanker, schöner, schneller und in jeder Hinsicht überlegen.
Herman Schönfeld

12
Obwohl klar war, dass der Code in der Frage Objective-C war, fand ich diese Antwort hilfreich. Dies ist auch bei Google eine hochrangige Frage.
jacob.toye

7

Schnelle Version:

    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]
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.