UIButton label text autoshrink con inserciones

Estoy usando el layout automático. Tengo un button UIB con una altura y un ancho fijos y una image de background (un cuadrado networkingondeado). Muestra cadenas de text de longitud variable (entre 1 y 30 palabras, digamos).

Quería hacer que el text se autocorriera dependiendo de la longitud de la cadena y tener hasta 3 líneas de text en mi button. Entonces hice esto:

[button.titleLabel setMinimumScaleFactor:0.01]; [button.titleLabel setAdjustsFontSizeToFitWidth: YES]; [button.titleLabel setNumberOfLines:3]; [button.titleLabel setTextAlignment:NSTextAlignmentCenter]; 

También establezco el tamaño de fuente en un valor alto como 50 en el Generador de interfaces. Y puse el salto de línea a "Clip".

El text del button se adapta correctamente al número de caracteres, pero tiende a ir más allá del marco del button. Lo hace para strings de longitud media, pero no para strings enormes y no tengo idea de por qué. He intentado añadir inserciones a mi button, pero no hace mucho, solo mueve el text excesivamente grande, por lo que supongo que el ajuste de la fuente se calcula antes de la incorporación de inserciones.

Debajo de una captura de pantalla. Hay 4 de esos botones, contenidos dentro de la vista azul más grande. El background rojo es el background del button, el amarillo es una image que sirve como background.

Captura de pantalla

Cargué un proyecto de ejemplo en Google Drive. Use iPhone 6 Plus para la simulación.

También debe configurar la propiedad titleEdgeInsets su button.

Por ejemplo:

 button.titleEdgeInsets = UIEdgeInsetsMake(2.0, 2.0, 2.0, 2.0); 

En su proyecto, parece que hay algunas restricciones de layout que afectan a la label del título de los botones.

Al agregar las siguientes restricciones, funciona.

 UILabel *titleLabel = button.titleLabel; NSDictionary *views = NSDictionaryOfVariableBindings(titleLabel); [button addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|[titleLabel]|" options:kNilOptions metrics:nil views:views]]; 

Antes de usar esta solución, le sugiero que primero intente establecer las restricciones de layout de una manera más simple si es posible.