Alinear elementos de UIToolBar

112

Tengo tres UIBarButtonItemcreados como se muestra a continuación. 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. ¿Existe otra forma de lograr esto?

//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];
4thSpace
fuente

Respuestas:

259

Agregue dos elementos UIBarButtonSystemItemFlexibleSpace a su barra de herramientas, a la izquierda y a la derecha de sus elementos

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

Agregar estos como lo haría con cualquier otro elemento de la barra de herramientas distribuirá el espacio de manera uniforme entre los dos.

nduplessis
fuente
25
No hay ninguna razón real para crear múltiples espacios flexibles. Puede agregar el mismo objeto de espacio flexible múltiple a su barra de herramientas varias veces si necesita más de uno.
mmc
mmc es correcto. De hecho, probablemente sería perfectamente razonable hacer un Singleton flexibleSpace y reutilizarlo en todo su producto. He oído decir que este era el verdadero uso original de los singleton: no para hacer cumplir las reglas del programa, sino para reducir los gastos generales.
Amagrammer
2
Olvidó actualizar la llamada de lanzamiento, debería leer [versión flexibleSpace];
Daniel Hepper
Sí, lo siento, decía [versión flexibleSpaceLeft] en lugar de [versión flexibleSpace].
Error tipográfico
30

Esto también se puede hacer directamente desde un guión gráfico.

Simplemente arrastre y suelte elementos en la barra de herramientas y convierta algunos de ellos en un espacio flexible o fijo para obtener el efecto deseado. Vea los dos ejemplos siguientes.

Uniformemente espaciado

Centrado

Arnaud
fuente
8

En Xamarin iOS

Alineado a la derecha:

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

Centro alineado:

var flexibleSpace = new UIBarButtonItem(UIBarButtonSystemItem.FlexibleSpace);
yourBar.SetItems(new [] { flexibleSpace, yourButton, flexibleSpace}, false);
Herman Schoenfeld
fuente
5
Este no es el tema. Estamos hablando de iOS puro aquí.
jturolla
4
Que es lo que apunta MonoTouch.
Herman Schoenfeld
2
Pregunta de Objective C no MonoTouch / C #
Max MacLeod
6
@MaxMacLeod: no está etiquetado como obj-c, está etiquetado como iPhone. Por tanto, mi respuesta es válida. También es bueno contrastar c # vs obj-c. Claramente, c # es moderno, más delgado, más agradable, más rápido y superior en todos los sentidos.
Herman Schoenfeld
12
Si bien puede haber quedado claro que el código de la pregunta era Objective-C, esta respuesta me resultó útil. También es una pregunta de alto rango en Google.
jacob.toye
7

Versión rápida:

    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
fuente