¿Cómo puedo modificar el espacio entre líneas (interlineado) en una línea múltiple UILabel
?
fuente
¿Cómo puedo modificar el espacio entre líneas (interlineado) en una línea múltiple UILabel
?
Editar: Evidentemente NSAttributedString
lo hará, en iOS 6 y posteriores. En lugar de usar un NSString
para establecer el texto de la etiqueta, cree un NSAttributedString
, establezca atributos en él y luego configúrelo como .attributedText
en la etiqueta. El código que desea será algo como esto:
NSMutableAttributedString* attrString = [[NSMutableAttributedString alloc] initWithString:@"Sample text"];
NSMutableParagraphStyle *style = [[NSMutableParagraphStyle alloc] init];
[style setLineSpacing:24];
[attrString addAttribute:NSParagraphStyleAttributeName
value:style
range:NSMakeRange(0, strLength)];
uiLabel.attributedText = attrString;
AttributedStringWithString edad de NSAttributedString hizo lo mismo, pero ahora que está en desuso.
Por razones históricas, aquí está mi respuesta original:
Respuesta corta: no puedes. Para cambiar el espaciado entre líneas de texto, tendrá que crear una subclase UILabel
y enrollar el suyo drawTextInRect
, crear varias etiquetas o usar una fuente diferente (tal vez una editada para una altura de línea específica, consulte la respuesta de Phillipe).
Respuesta larga: en el mundo impreso y en línea, el espacio entre líneas de texto se conoce como "interlineado" (rima con "título" y proviene del metal de plomo utilizado hace décadas). Leading es una propiedad de solo lectura de UIFont
, que fue obsoleta en 4.0 y reemplazada por lineHeight
. Hasta donde yo sé, no hay forma de crear una fuente con un conjunto específico de parámetros como lineHeight
; obtiene las fuentes del sistema y cualquier fuente personalizada que agregue, pero no puede modificarlas una vez instaladas.
Tampoco hay ningún parámetro de espaciado UILabel
.
No estoy particularmente contento con UILabel
el comportamiento de este, por lo que sugiero que escriba su propia subclase o use una biblioteca de terceros. Eso hará que el comportamiento sea independiente de su elección de fuente y será la solución más reutilizable.
Me gustaría que era más flexibilidad en UILabel
, y yo estaría feliz de estar equivocado probada!
A partir de ios 6, puede establecer una cadena con atributos en UILabel:
fuente
AttributedString
deshabilita, por ejemplo, la alineación del texto de la etiqueta, por lo que debe agregarlo al estilo de párrafo.Puede controlar el espaciado de línea en el guión gráfico:
pregunta duplicada
fuente
Desde Interface Builder:
Programáticamente:
Rápido 4
Usando extensión de etiqueta
Ahora llame a la función de extensión
O usando una instancia de etiqueta (simplemente copie y ejecute este código para ver el resultado)
Swift 3
fuente
Mi solución fue parchear el archivo de fuente y arreglar definitivamente su altura de línea. http://mbauman.net/geek/2009/03/15/minor-truetype-font-editing-on-a-mac/
Tuve que modificar 'lineGap', 'ascender', 'descender' en el bloque 'hhea' (como en el ejemplo del blog).
fuente
Este chico creó una clase para obtener la altura de la línea (sin usar CoreText, como biblioteca MTLabel): https://github.com/LemonCake/MSLabel
fuente
Lo mejor que encontré es: https://github.com/mattt/TTTAttributedLabel
Es una subclase de UILabel, por lo que puede colocarla y luego cambiar la altura de la línea:
fuente
Encontré bibliotecas de terceros como esta:
https://github.com/Tuszy/MTLabel
Ser la solución más sencilla.
fuente
Aquí hay un código rápido para que establezca el interlineado mediante programación
fuente
Por supuesto, la respuesta de Mike no funciona si pasa la cadena mediante programación. En este caso, debe pasar una cadena atribuida y cambiar su estilo.
fuente