UIButton no cambio de tamaño de tamaño de forma automática

Estoy programación adición de un UIButton a mi punto de vista, y quiero que el tamaño de la fuente en el botón cambiar de tamaño automáticamente (por ejemplo, si el texto es largo, cambiar el tamaño a un tamaño de fuente más pequeño para que quepa el botón).

Este código no funciona (la fuente es siempre la misma):

myButton = [UIButton buttonWithType: UIButtonTypeRoundedRect];
[myButton setTitle:[NSString stringWithFormat:@"hello"] forState:UIControlStateNormal];
[myButton setFrame: CGRectMake(0, 0, 180, 80)];
[myButton.titleLabel setFont: [UIFont boldSystemFontOfSize:16.0]];

myButton.titleLabel.adjustsFontSizeToFitWidth = TRUE;

[theView addSubview:myButton];
  • echa un vistazo a este stackoverflow.com/questions/6178545/… que hizo por mí
  • También se trata de llamar a la sizeToFit método en el botón del titleLabel.
  • ¿Qué comportamiento quieres? ¿Quieres el texto para expandir para ajustar el botón, ¿ desea que el botón reducir hasta ajustar el texto o ¿quieres el texto para reducir, en lugar de recortar si es grande para caber?
InformationsquelleAutor flip79 | 2012-08-30

1 Kommentar

  1. 40

    El código funciona, pero quizás no de la manera que usted desea. El adjustsFontSizeToFitWidth propiedad sólo reduce el tamaño de la fuente si el texto no cabe (abajo a la minimumFontSize). Nunca va a aumentar el tamaño de la fuente. En este caso, una de 16 pt «hola» se ajusta fácilmente en el 180pt botón wide así que no hay cambio de tamaño se va a producir. Si desea que la fuente aumentar para ajustarse al espacio disponible debe aumentar a un gran número de modo que se reduce el tamaño máximo que se adapte.

    Sólo para mostrar cómo se está trabajando actualmente, he aquí un buen ejemplo inventado (haga clic en el botón para reducir su anchura como ver la fuente disminuir el minimumFontSize):

    - (void)viewDidLoad {
        [super viewDidLoad];
    
        UIButton *myButton = [UIButton buttonWithType: UIButtonTypeRoundedRect];
        [myButton setTitle:[NSString stringWithFormat:@"hello"] forState:UIControlStateNormal];
        [myButton setFrame: CGRectMake(10, 10, 300, 120)];
        [myButton.titleLabel setFont: [UIFont boldSystemFontOfSize:100.0]];
        myButton.titleLabel.adjustsFontSizeToFitWidth = YES;
        myButton.titleLabel.minimumFontSize = 40;
        [myButton addTarget:self action:@selector(buttonTap:) forControlEvents:UIControlEventTouchUpInside];
        [self.view addSubview:myButton];
    }
    
    - (void)buttonTap:(UIButton *)button {
        button.frame = CGRectInset(button.frame, 10, 0);
    }
    • Ander, el código funciona como un encanto, muchas gracias!!! El único problema que todavía tengo es que, al cambiar el contenido del botón (el texto), se cambia de posición superior o inferior dentro del botón, en lugar de permanecer centrado. También parece que la posición de partida es infuenced también por el tamaño de fuente inicial, incluso si se ajusta más tarde. Ya he probado a setContentVerticalAlignment:UIControlContentVerticalAlignmentcenter pero no parece hacer nada.
    • Código Funciona..!! Quiero actualizar :: el Uso de ‘minimumScaleFactor’ en lugar de ‘minimumFontSize’ ya que está obsoleto. Así se puede establecer el tamaño mínimo de la letra como -> myButton.titleLabel.minimumScaleFactor = 0.4; (40 / 100). Gracias..:)
    • Gracias por tu respuesta – estaba buscando una manera de hacer esto en UIButtons creado en el Guión gráfico, donde se tiene la configuración de este para UILabel, pero no para UIButton. Este es, de hecho, funciona como se espera – y sí, debe utilizar minimumScaleFactor lugar.
    • Puede establecer los valores en un Storyboard si selecciona la UIButton y, a continuación, ver la identidad del inspector. En «Definido por el Usuario en tiempo de ejecución Atributos» introduzca la Ruta de la Clave, el Tipo y el Valor que desea modificar. En este caso: titleLabelFontSizeToFitWidth, Boolean, Sí; titleLabel.minimumScaleFactor, Número de 0.2. Funciona como un encanto y no hay necesidad de añadir código.

Kommentieren Sie den Artikel

Bitte geben Sie Ihren Kommentar ein!
Bitte geben Sie hier Ihren Namen ein

Pruebas en línea