2009-03-02 17 views
101

Tengo tres UIBarButtonItem creados de la siguiente manera. Se alinean a la izquierda y me gustaría alinear el centro para que no haya un espacio en el lado derecho. No veo una propiedad de alineación en UIToolBar. ¿Hay alguna otra manera de lograr esto?Alineación de elementos de 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]; 

Respuesta

244

añadir dos elementos UIBarButtonSystemItemFlexibleSpace a su barra de herramientas, a la izquierda ya la derecha de sus artículos

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

Añadiendo estos como lo haría con cualquier otro elemento de barra de herramientas se distribuya uniformemente el espacio entre los dos de ellos.

+24

No hay ninguna razón real para hacer múltiples espacios flexibles. Puede agregar el mismo objeto múltiple de espacio flexible a su barra de herramientas varias veces si necesita más de uno. – mmc

+0

mmc es correcto. De hecho, probablemente sería perfectamente razonable crear un singleton flexibleSpace y reutilizarlo en todo su producto. He oído decir que este fue el verdadero uso original de los singleton: no para hacer cumplir las reglas del programa, sino para reducir los gastos generales. – Amagrammer

+0

Actualizó el código para usar una instancia del espacio flexible – nduplessis

6

En Xamarin iOS

alineado a la derecha:

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

Centro Alineados:

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

Este no es el tema. Estamos hablando de iOS puro aquí. – jturolla

+4

que es lo que MonoTouch apunta. –

+2

Pregunta de Objective C no MonoTouch/C# –

25

Esto también se puede hacer a la derecha de un guión.

Simplemente arrastre y suelte elementos en la barra de herramientas, y convierta algunos de ellos en espacio flexible o fijo para obtener el efecto deseado. Vea los dos ejemplos a continuación.

Evenly spaced

Centered

+0

Prefiero usar el guión gráfico para administrar mi UI. – AechoLiu

2

versión 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] 
Cuestiones relacionadas