Alinhando itens UIToolBar

112

Eu tenho três UIBarButtonItemcriados como abaixo. Eles se alinham à esquerda e eu gostaria de alinhar no centro para que não haja uma lacuna no lado direito. Não vejo uma propriedade de alinhamento ativada UIToolBar. Existe outra maneira de fazer isso?

//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];
4º Espaço
fonte

Respostas:

259

Adicione dois itens UIBarButtonSystemItemFlexibleSpace à sua barra de ferramentas, à esquerda e à direita de seus itens

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

Adicioná-los como faria com qualquer outro item da barra de ferramentas distribuirá o espaço igualmente entre os dois.

nduplessis
fonte
25
Não há nenhuma razão real para fazer vários espaços flexíveis. Você pode adicionar o mesmo objeto de espaço flexível múltiplo à sua barra de ferramentas várias vezes se precisar de mais de um.
MMC de
mmc está correto. Na verdade, provavelmente seria perfeitamente razoável fazer um singleton FlexibleSpace e reutilizá-lo em todo o produto. Eu ouvi dizer que esse era o verdadeiro uso original dos singletons: não para fazer cumprir as regras do programa, mas para reduzir a sobrecarga.
Amagrammer 01 de
2
Você se esqueceu de atualizar a chamada de liberação, deve ler [liberação flexívelSpace];
Daniel Hepper
Sim, desculpe, lia-se [versão flexívelSpaceLeft] em vez de [versão flexívelSpace].
Erro de digitação
30

Isso também pode ser feito diretamente de um storyboard.

Basta arrastar e soltar os itens da barra de ferramentas e transformar alguns deles em um espaço flexível ou fixo para obter o efeito desejado. Veja os dois exemplos abaixo.

Uniformemente espaçados

Centrado

Arnaud
fonte
8

No Xamarin iOS

Alinhado à direita:

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

Alinhado ao centro:

var flexibleSpace = new UIBarButtonItem(UIBarButtonSystemItem.FlexibleSpace);
yourBar.SetItems(new [] { flexibleSpace, yourButton, flexibleSpace}, false);
Herman Schoenfeld
fonte
5
Este não é o assunto. Estamos falando de iOS puro aqui.
jturolla
4
Que é o que o MonoTouch visa.
Herman Schoenfeld
2
Pergunta Objective C não MonoTouch / C #
Max MacLeod
6
@MaxMacLeod: não está marcado obj-c, é iPhone marcado. Portanto, minha resposta é válida. Também é bom contrastar c # vs obj-c. Claramente, c # é moderno, mais fino, mais agradável, mais rápido e superior em todos os sentidos.
Herman Schoenfeld
12
Embora possa ter ficado claro que o código da pergunta era Objective-C, achei essa resposta útil. É uma questão importante no Google também.
jacob.toye
7

Versão 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
fonte