Esto es parte de una aplicación de iPhone pero debe aplicarse a Cocoa escrito en objC en general.Cambiar el tamaño de UILabel para que quepa con Word Wrap
Tengo un UILabel con varias cantidades de texto (de caracteres individuales a varias oraciones). El texto siempre debe mostrarse en la fuente más grande posible que se ajuste a todo el texto dentro de UILabel. El número máximo de líneas se establece en 4 y el modo de salto de línea se establece en ajuste de palabras.
Como se usan varias líneas, ajustaFontSizeToFitWidth no funcionará para cambiar el tamaño del texto.
Así que estoy usando un bucle para determinar el mayor tamaño de la fuente posible para cada cadena como por ejemplo:
//Set the text self.textLabel.text = text; //Largest size used NSInteger fsize = 200; textLabel.font = [UIFont fontWithName:@"Verdana-Bold" size:fsize]; //Calculate size of the rendered string with the current parameters float height = [text sizeWithFont:textLabel.font constrainedToSize:CGSizeMake(textLabel.bounds.size.width,99999) lineBreakMode:UILineBreakModeWordWrap].height; //Reduce font size by 5 while too large, break if no height (empty string) while (height > textLabel.bounds.size.height and height != 0) { fsize -= 5; textLabel.font = [UIFont fontWithName:@"Verdana-Bold" size:fsize]; height = [text sizeWithFont:textLabel.font constrainedToSize:CGSizeMake(textLabel.bounds.size.width,99999) lineBreakMode:UILineBreakModeWordWrap].height; };
Este enfoque funciona bien en su mayor parte. La excepción son palabras largas. Tomemos la cadena @ "La experiencia foo". como ejemplo. La palabra "experiencia", que es mucho más larga que las demás, se dividirá por la mitad sin que se envuelva la palabra correctamente y la secuencia se dividirá en 4 líneas. Estoy buscando una manera de reducir el tamaño aún más para que cada palabra individual se ajuste en una línea.
Ejemplo:
-old-
tamaño de letra: 60
The Exper ience foo
debería ser
-NEW-
tamaño de letra: 30
The Experience foo
Probablemente es una manera fácil de hacer esto, pero estoy golpeando una pared.
porque 'sizeWithFont:' se ha vuelto obsoleto con iOS 7, que debiera reemplácelo por 'boundingRectWithSize:'. – AppsolutEinfach