2010-11-18 17 views
7

Algunos antecedentes: quería tener 3 botones en un UIToolBar. Logré que el central estuviera centrado y todo poniéndolo en un UIToolBar en sí mismo en un UIView.Cambiar el tamaño de un UIBarButtonItem cuando el título es demasiado ancho

Everythings se ve como debería, aparte de cuando el título de los botones del medio se vuelve demasiado grande. Luego se muestra debajo de los botones izquierdo o derecho.

No puedo obtener el UIToolBar o el ancho UIBarButtonItems para poder cambiar el tamaño de ellos cuando son demasiado grandes. El 'UIBarButtonItem' tiene una muy buena propiedad width que me permitiría cambiar el tamaño del control si es demasiado grande. ¡Pero no puedo saber cuándo es demasiado grande!

EDITAR: Hice el camino difícil al final. Calculo el tamaño del texto y lo comparo con el tamaño máximo de píxel que vi en el dispositivo. Feo, pero funciona.

+ (CGFloat)calculateTextWidth:(NSString *)text 
{ 
    CGSize fullSize = [UIScreen mainScreen].applicationFrame.size; 
    UIGraphicsBeginImageContext(fullSize); 

    CGContextRef context = UIGraphicsGetCurrentContext(); 


    // calculate the text size 
    CGContextSelectFont(context, "Helvetica", 17, kCGEncodingMacRoman); 
    CGContextSetTextMatrix(context, CGAffineTransformMakeScale(1.0, -1.0)); 
    CGContextSetTextDrawingMode(context, kCGTextInvisible); 

    // measure the text 
    CGPoint initialTextPosition = CGContextGetTextPosition(context); 
    CGContextShowTextAtPoint(context, 0, 0, [text cStringUsingEncoding:NSASCIIStringEncoding], text.length); 
    CGPoint finalTextPosition = CGContextGetTextPosition(context); 

    return finalTextPosition.x - initialTextPosition.x; 
} 

Respuesta

8

Coloque un botón de barra espaciadora flexible Elemento entre los botones izquierdo y derecho y el botón central; eso permitirá que los botones laterales ocupen solo el ancho que necesiten y mantengan centrado el botón central mientras lo deja crecer en el espacio que lo rodea.

Aquí hay un par de capturas de pantalla de Interface Builder de algo que estaba trabajando esta mañana que muestra el efecto: las flechas de doble punta son la forma de mostrar los elementos flexibles de espacio de IB ...

Interface Builder screenshot showing toolbar with wide flexible spaces

... y lo mismo con un título más largo en el botón central ...

Interface Builder screenshot showing toolbar with narrow flexible spaces

y aquí está la barra de herramientas con el botón de corto y largo centro, como se ve en mi iph uno 3GS:

iPhone screenshot showing toolbar with wide flexible spaces

iPhone screenshot showing toolbar with narrow flexible spaces

+1

si se establece la anchura UIBarButtonItem a 0,0, se ajusta su anchura de forma automática, por lo que hay no es necesario calcular el ancho Especialmente útil cuando se utilizan cadenas localizadas, que siempre tienen diferentes tamaños. –

2

Aquí es una mejor manera de encontrar la anchura del texto:

+ (CGFloat)calculateTextWidth:(NSString *)text 
{ 
    UIFont *font = [UIFont fontWithName:@"Helvetica" size:17]; 

    return [text sizeWithFont:font].width; 
} 
Cuestiones relacionadas