Вирівнювання елементів UIToolBar


112

У мене є три UIBarButtonItemстворені як нижче. Вони вирівнюють ліворуч, і я хотів би вирівняти центр, щоб не було зазору в правій частині. Я не бачу властивості вирівнювання UIToolBar. Чи є інший спосіб досягти цього?

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

Відповіді:


259

Додайте два елементи UIBarButtonSystemItemFfleSpace на панель інструментів, ліворуч та праворуч від елементів.

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

Якщо додати їх, як і будь-які інші елементи панелі інструментів, розподілить простір між ними.


25
Немає реальної причини робити кілька гнучких просторів. Ви можете додати один і той же безліч гнучких космічних об'єктів на панель інструментів кілька разів, якщо вам потрібно більше одного.
mmc

mmc вірно. Насправді, можливо, було б цілком розумно зробити однотонний гнучкийSpace і повторно використовувати його протягом усього продукту. Я чув, що він стверджував, що це справжнє оригінальне використання синглів: не для виконання програмних правил, а для зменшення накладних витрат.
Amagrammer

2
Ви забули оновити виклик випуску, слід прочитати [гнучкийSpace release];
Даніель Хеппер

Так, вибачте, він читав [гнучкийSpaceLeft реліз] замість [гнучкийSpace реліз]. Друкарська помилка
nduplessis

30

Це також можна зробити прямо з розкадрівки.

Просто перетягніть елементи на панелі інструментів і перетворіть деякі з них у гнучкий або фіксований простір, щоб отримати бажаний ефект. Дивіться два приклади нижче.

Рівномірно розташований

По центру


8

У Xamarin iOS

Вирівняно праворуч:

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

Вирівняний центр:

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

5
Це не тема. Тут ми говоримо про чисті iOS.
jturolla

4
На що спрямовано MonoTouch.
Герман Шоенфельд

2
Об’єктивне запитання C не MonoTouch / C #
Max MacLeod

6
@MaxMacLeod: це не позначено obj-c, це позначений iPhone. Тому моя відповідь справедлива. Також добре контрастувати c # vs obj-c. Зрозуміло, що c # є сучасним, стрункішим, приємнішим, швидшим та найкращим у всіх аспектах.
Герман Шоенфельд

12
Хоча, можливо, було зрозуміло, що код у запитанні був «Objective-C», я вважав цю відповідь корисною. Це питання високого рейтингу і в Google.
jacob.toye

7

Швидка версія:

    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]
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.