2010-04-27 22 views
32

No puedo encontrar la manera de establecer el tamaño de fuente del título en un UIBarButtonItem personalizado. La única forma en que puedo pensar en evitar esto es establecerlo como una imagen que me gustaría evitar. ¿Cualquier otra sugerencia?¿Cómo se establece el tamaño de fuente en un UIBarButtonItem?

+0

Aquí hay una pregunta similar. http://stackoverflow.com/questions/5421121/change-font-size-via-uibarbuttonitem-in-uitextview-works-just-once – acecapades

Respuesta

3

Crea un UILabel y usa -initWithCustomView:.

+0

Así puedo pasar la UIBarButtonItem en el UILabel y establecer la fuente normalmente ? También podría tener un problema con su método porque estoy usando Interface Builder para poner UIBarButtonItem en una UIToolbar. – Jim

+1

use setTextAttributes: forState: – bigkm

2

Como ejemplo concreto de lo que KennyTM sugiere, se crea el UIBarButtonItem con algo como lo siguiente (en código):

UILabel *txtLabel = [[UILabel alloc] initWithFrame:rect]; 
txtLabel.backgroundColor = [UIColor clearColor]; 
txtLabel.textColor = [UIColor lightGrayColor]; 
txtLabel.text = @"This is a custom label"; 
UIBarButtonItem *btnText = [[[UIBarButtonItem alloc] initWithCustomView:txtLabel] autorelease]; 

A continuación, puede agregarlo como texto centrado en un UIToolbar (por ejemplo) con lo siguiente:

UIToolbar *toolBar = [[UIToolbar alloc] initWithFrame:rect]; 
toolBar.barStyle = UIBarStyleBlackTranslucent; 
UIBarButtonItem *flexSpace1 = [[[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:nil action:nil] autorelease]; 
UIBarButtonItem *flexSpace2 = [[[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:nil action:nil] autorelease]; 

[toolBar setItems:[NSArray arrayWithItems:flexSpace1, btnText, flexSpace2, nil]]; 

(por supuesto, para obtener el formato correcto, el rect utiliza para inicializar txtLabel y toolBar deben ser los tamaños adecuados .... pero eso es otro ejercicio!)

+1

Puede hacerlo del tamaño correcto usando [txtLabel sizeToFit]. Como nota al margen, no estoy seguro de si este método conservará el fondo de la cápsula azul como elemento de botón, por lo que es posible que tenga que usar algunos gráficos personalizados con él. Pero es la mejor opción ya que no puede establecer el tamaño de fuente de un elemento de botón de barra si lo inicializa con un título. – axiixc

+0

También debe establecer el tamaño de fotograma de la etiqueta. En mi caso, no se muestran elementos porque se inicializaron con ancho y alto de 0. – sprinter252

78

De una manera fácil, simplemente:

Objective-C:

NSUInteger fontSize = 20; 
UIFont *font = [UIFont boldSystemFontOfSize:fontSize]; 
NSDictionary *attributes = @{NSFontAttributeName: font}; 

UIBarButtonItem *item = [[UIBarButtonItem alloc] init]; 

[item setTitle:@"Some Text"]; 
[item setTitleTextAttributes:attributes forState:UIControlStateNormal]; 

self.navigationItem.rightBarButtonItem = item; 

Swift:

let fontSize:CGFloat = 20; 
let font:UIFont = UIFont.boldSystemFont(ofSize: fontSize); 
let attributes:[String : Any] = [NSFontAttributeName: font]; 

let item = UIBarButtonItem.init(); 

item.title = "Some Text"; 
item.setTitleTextAttributes(attributes, for: UIControlState.normal); 

self.navigationItem.rightBarButtonItem = item; 
+1

También puede usar el proxy 'UIAppearance' para' setTitleTextAttributes'. – livingtech

+4

Nota secundaria: el valor de la clave UITextAttributeFont ha quedado obsoleto en iOS 7, puede usar NSFontAttributeName en su lugar. –

+0

genial, gracias .. !!! – tesmojones

2
[[UIBarButtonItem appearance]setTitleTextAttributes:[NSDictionary dictionaryWithObjectsAndKeys: 
                [UIColor colorWithRed:245.0/255.0 green:245.0/255.0 blue:245.0/255.0 alpha:1.0], NSForegroundColorAttributeName, 
                [UIFont fontWithName:@"FONT-NAME" size:21.0], NSFontAttributeName, nil] 
              forState:UIControlStateNormal]; 
Cuestiones relacionadas