2010-09-07 13 views

Respuesta

266
UIBarButtonItem *fixedItem = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFixedSpace target:nil action:nil]; 
fixedItem.width = 20.0f; // or whatever you want 

UIBarButtonItem *flexibleItem = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:nil action:nil]; 
+41

Tenga en cuenta que para establecer el ancho de un UIBarButtonItem de espacio fijo, debe establecer la propiedad '.width'. –

+0

respuesta perfecta! –

+0

¿cómo podemos tener un ancho flexible dar el mismo espacio entre todos los botones usando el código? No quiero el ancho del código duro = 20.0 – Satyam

7
UIBarButtonItem *todayItem = [[UIBarButtonItem alloc] initWithTitle:@"Today" style:UIBarButtonItemStylePlain target:self action:@selector(update_baritem:)]; 
todayItem.tag = 2; 

UIBarButtonItem *cashItem = [[UIBarButtonItem alloc] initWithTitle:@"Cash" style:UIBarButtonItemStylePlain target:self action:@selector(update_baritem:)]; 
cashItem.tag = 3; 

UIBarButtonItem *creditItem = [[UIBarButtonItem alloc] initWithTitle:@"Credit" style:UIBarButtonItemStylePlain target:self action:@selector(update_baritem:)]; 
creditItem.tag = 4; 

UIBarButtonItem *allItem = [[UIBarButtonItem alloc] initWithTitle:@"All" style:UIBarButtonItemStylePlain target:self action:@selector(update_baritem:)]; 
allItem.tag = 1; 

UIBarButtonItem *returnItem = [[UIBarButtonItem alloc] initWithTitle:@"Return" style:UIBarButtonItemStylePlain target:self action:@selector(update_baritem:)]; 
returnItem.tag = 5; 

UIBarButtonItem *fixedItem = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFixedSpace target:nil action:nil]; 
[fixedItem setWidth:455.0f]; 

UIBarButtonItem *fixed2Item = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFixedSpace target:nil action:nil]; 
[fixed2Item setWidth:37.0f]; 

UIBarButtonItem *flexibleItem = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:nil action:nil]; 

[self.toolbar setItems:@[fixed2Item, returnItem, creditItem, cashItem, fixedItem, todayItem, flexibleItem, allItem] animated:NO]; 
+0

¿Por qué está configurando * a la derecha * elementos del botón de la barra para * elementos a la izquierda *? Eso es solo un estilo realmente malo o un error y no sé cuál. –

1

En viewDidLoad:

//toolbar 
UIToolbar *toolBar = [[UIToolbar alloc] initWithFrame:CGRectMake(0, 416, 320, 44)]; 

// bar btns 
UIBarButtonItem *backBtn = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemRewind target:self action:@selector(goBack)]; 
UIBarButtonItem *forwardBtn = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFastForward target:self action:@selector(goForward)]; 
UIBarButtonItem *flexibleSpace = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:self action:nil]; 
UIBarButtonItem *bookmarkBtn = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemBookmarks target:self action:@selector(bookmark)]; 
UIBarButtonItem *refreshBtn = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemRefresh target:self action:@selector(refresh)]; 
UIBarButtonItem *stopLoadingBtn = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemStop target:self action:@selector(stopLoading)]; 

// add btns to the bar 
[toolBar setItems:[NSMutableArray arrayWithObjects:bookmarkBtn,backBtn,forwardBtn,flexibleSpace,refreshBtn,stopLoadingBtn, nil]]; 

// adds the toobar to the view 
[self.view addSubview:toolBar]; 

No se olvide de las acciones para cada botón también (en este ejemplo, un UIWebView):

-(void)goBack 
{ 
    [_webView goBack]; 
} 

-(void)goForward 
{ 
    [_webView goForward]; 
} 

etc.

6

Swift

// Fixed Space 
let fixedSpace: UIBarButtonItem = UIBarButtonItem(barButtonSystemItem: UIBarButtonSystemItem.FixedSpace, target: nil, action: nil) 
fixedSpace.width = 20.0 

// Flexible Space 
let flexibleSpace: UIBarButtonItem = UIBarButtonItem(barButtonSystemItem: UIBarButtonSystemItem.FlexibleSpace, target: nil, action: nil) 
1

Con Swift 3, UIBarButtonItem tiene un inicializador llamada init(barButtonSystemItem:target:action:). init(barButtonSystemItem:target:action:) tiene la siguiente declaración:

convenience init(barButtonSystemItem systemItem: UIBarButtonSystemItem, target: Any?, action: Selector?) 

Inicializa un nuevo elemento que contiene el elemento del sistema especificado.


UIBarButtonSystemItem es una enumeración que ofrece muchos casos incluyendo done, play, add o cancel. Sin embargo, de acuerdo con sus necesidades, también puede elegir flexibleSpace o fixedSpace casos.

caso

flexibleSpace tiene la siguiente declaración:

espacio en blanco para agregar entre otros artículos. El espacio se distribuye equitativamente entre los otros elementos. Las demás propiedades de elementos se ignoran cuando se establece este valor.

caso

fixedSpace tiene la siguiente declaración:

espacio en blanco para agregar entre otros artículos. Solo se usa la propiedad width cuando se establece este valor.


Por lo tanto, puede crear elementos fijos y flexibles botón de la barra de espacio mediante programación, como se muestra a continuación:

let flexibleSpace = UIBarButtonItem(
    barButtonSystemItem: UIBarButtonSystemItem.flexibleSpace, 
    target: nil, 
    action: nil 
) 
let fixedSpace = UIBarButtonItem(
    barButtonSystemItem: UIBarButtonSystemItem.fixedSpace, 
    target: nil, 
    action: nil 
) 
fixedSpace.width = 30 // Set width with the appropriate value 

A modo de ejemplo, el código del patio de abajo muestra cómo agregar una barra inferior con dos elementos centrados de botón de barra de reproducción y pausa separados por un espacio fijo de 30 en una vi controlador de ew:

import PlaygroundSupport 
import UIKit 

class ViewController: UIViewController { 

    override func viewDidLoad() { 
     super.viewDidLoad() 

     view.backgroundColor = .white 
     title = "Home" 
    } 

    override func viewWillAppear(_ animated: Bool) { 
     super.viewWillAppear(animated) 

     // Show navigation controller’s built-in toolbar 
     navigationController?.setToolbarHidden(false, animated: false) 

     // Create UIBarButtonItems 
     let flexibleSpace1 = UIBarButtonItem(barButtonSystemItem: .flexibleSpace, target: nil, action: nil) 
     let playItem = UIBarButtonItem(barButtonSystemItem: .play, target: self, action: nil) 
     let fixedSpace = UIBarButtonItem(barButtonSystemItem: .fixedSpace, target: nil, action: nil) 
     fixedSpace.width = 30 
     let pauseItem = UIBarButtonItem(barButtonSystemItem: .pause, target: self, action: nil) 
     let flexibleSpace2 = UIBarButtonItem(barButtonSystemItem: .flexibleSpace, target: nil, action: nil) 

     // Set the view controller toolbar items 
     setToolbarItems([flexibleSpace1, playItem, fixedSpace, pauseItem, flexibleSpace2], animated: false) 
    } 

    override func viewWillDisappear(_ animated: Bool) { 
     // Hide navigation controller’s built-in toolbar 
     navigationController?.setToolbarHidden(true, animated: true) 

     super.viewWillDisappear(animated) 
    } 

} 

let viewController = ViewController() 
let navigationController = UINavigationController(rootViewController: viewController) 
PlaygroundPage.current.liveView = navigationController 

Vista previa del controlador de vista en el editor asistente de juegos usando VerEditor AsistenteMostrar Asistente de Edición

enter image description here

Cuestiones relacionadas