titlelabel color buttons iphone cocoa-touch uibutton

iphone - color - El texto de la etiqueta UIButton está siendo recortado



menu ios (5)

Llame a sizeToFit en su botón. Esto redimensionará el botón para que se ajuste al texto.

Tengo un UIButton integrado en Interface Builder que tiene una etiqueta predeterminada. En Xcode, estoy cambiando el texto de la etiqueta de forma dinámica así:

myButton.titleLabel.text = @"this is the new label";

Sin embargo, cuando el texto se actualiza, la nueva cadena se recorta al mismo tamaño que la cadena original y termina pareciéndose a:

this...label

Alguien sabe por qué está pasando esto?


Debe usar setTitle: forState: para cambiar el título de un UIButton . Si cambia el título usted mismo, el botón no tiene indicación de que necesite cambiar el tamaño de la etiqueta, usted terminaría teniendo que hacer algo como esto:

myButton.titleLabel.text = @"this is the new label"; [myButton setNeedsLayout];

pero ni siquiera estoy seguro de que funcione en todos los casos. Métodos como setTitle:forState: se proporcionan para que pueda proporcionar títulos para varios estados sin tener que actualizar el botón manualmente, y para que el botón sepa que debe disponerse con un nuevo título.


Si eso no funcionó, siempre puedes determinar el tamaño de la cadena y ajustar el ancho del marco del botón. En ese caso, está seguro de que encajará.

// Calculate the size CGSize buttonSize = [@"My text.." sizeWithFont:[UIFont systemFontOfSize:15.0] constrainedToSize:someSize lineBreakMode:UILineBreakModeWordWrap]; // Do whatever you want with the "buttonSize", you can for example adjust your button''s frame width


Una solución alternativa es permitir que el UILabel interno de UIButton reduzca el tamaño de la fuente, como UILabels puede hacer:

button.titlelabel.minimumFontSize = 8.0; // or some more adequate size self.buttonWithLongTitle.titleLabel.adjustsFontSizeToFitWidth = YES;


Intente utilizar el método setTitle del botón (en lugar de configurar el título directamente en la etiqueta). Debería forzar el cambio de tamaño de la etiqueta del título.

C objetivo:

[myButton setTitle:@"This is the text" forState:UIControlStateNormal];

O en Swift:

myButton.setTitle("This is the text", for: .normal)