Establecer el espaciado de línea UILabel

¿Cómo puedo modificar el espacio entre líneas (espacio entre líneas) en una UILabel líneas UILabel ?

Editar: Evidentemente, NSAttributedString lo hará, en iOS 6 y versiones posteriores. En lugar de usar un NSString para establecer el texto de la etiqueta, cree un NSAttributedString , establezca los atributos en él, luego NSAttributedString como NSAttributedString en la etiqueta. El código que quieres 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; 

El antiguo attributeStringWithString de NSAttributedString hizo lo mismo, pero ahora está en desuso.

Por razones históricas, esta es mi respuesta original:

Respuesta corta: no puedes. Para cambiar el espacio entre líneas de texto, deberá subclase UILabel y desplegar su propio drawTextInRect , crear varias tags o utilizar una fuente diferente (tal vez una editada para una altura de línea específica, ver la respuesta de Phillipe).

Respuesta larga: en el mundo impreso y en línea, el espacio entre líneas de texto se conoce como “líder” (rima con “encabezado”) y proviene del metal de plomo utilizado hace décadas). Liderar es una propiedad de solo lectura de UIFont , que fue desaprobada 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 ; obtienes las fonts del sistema y cualquier fuente personalizada que agregues, pero no puedes modificarlas una vez instaladas.

No hay parámetro de espaciado en UILabel , tampoco.

No estoy particularmente contento con el comportamiento de UILabel tal como está, por lo que sugiero escribir su propia subclase o utilizar una biblioteca de terceros. Eso hará que el comportamiento sea independiente de la elección de tu fuente y será la solución más reutilizable.

¡Ojalá hubiera más flexibilidad en UILabel , y estaría feliz de haber demostrado que estaba equivocado!

A partir de ios 6 puede establecer una cadena atribuida en el UILabel:

 NSString *labelText = @"some text"; NSMutableAttributedString *attributedString = [[NSMutableAttributedString alloc] initWithString:labelText]; NSMutableParagraphStyle *paragraphStyle = [[NSMutableParagraphStyle alloc] init]; [paragraphStyle setLineSpacing:40]; [attributedString addAttribute:NSParagraphStyleAttributeName value:paragraphStyle range:NSMakeRange(0, [labelText length])]; cell.label.attributedText = attributedString ; 

Puede controlar el espaciado entre líneas en el guión gráfico:

pregunta duplicada

Mi solución fue parchear el archivo de fuente y fijar definitivamente su altura de línea. http://mbauman.net/geek/2009/03/15/minor-truetype-font-editing-on-a-mac/

Tuve que modificar ‘lineGap’, ‘ascendente’, ‘descendiente’ en el bloque ‘hhea’ (como en el ejemplo del blog).

Desde Interface Builder:

enter image description here

Progtwigdo:

SWIFT 4

Usando la extensión de etiqueta

 extension UILabel { func setLineSpacing(lineSpacing: CGFloat = 0.0, lineHeightMultiple: CGFloat = 0.0) { guard let labelText = self.text else { return } let paragraphStyle = NSMutableParagraphStyle() paragraphStyle.lineSpacing = lineSpacing paragraphStyle.lineHeightMultiple = lineHeightMultiple let attributedString:NSMutableAttributedString if let labelattributedText = self.attributedText { attributedString = NSMutableAttributedString(attributedString: labelattributedText) } else { attributedString = NSMutableAttributedString(string: labelText) } // Line spacing attribute attributedString.addAttribute(NSAttributedStringKey.paragraphStyle, value:paragraphStyle, range:NSMakeRange(0, attributedString.length)) self.attributedText = attributedString } } 

Ahora llame a la función de extensión

 let label = UILabel() let stringValue = "How to\ncontrol\nthe\nline spacing\nin UILabel" // Pass value for any one argument - lineSpacing or lineHeightMultiple label.setLineSpacing(lineSpacing: 2.0) . // try values 1.0 to 5.0 // or try lineHeightMultiple //label.setLineSpacing(lineHeightMultiple = 2.0) // try values 0.5 to 2.0 

O usando la instancia de etiqueta (solo copie y ejecute este código para ver el resultado)

 let label = UILabel() let stringValue = "Set\nUILabel\nline\nspacing" let attrString = NSMutableAttributedString(string: stringValue) var style = NSMutableParagraphStyle() style.lineSpacing = 24 // change line spacing between paragraph like 36 or 48 style.minimumLineHeight = 20 // change line spacing between each line like 30 or 40 // Line spacing attribute attrString.addAttribute(NSAttributedStringKey.paragraphStyle, value: style, range: NSRange(location: 0, length: stringValue.characters.count)) // Character spacing attribute attrString.addAttribute(NSAttributedStringKey.kern, value: 2, range: NSMakeRange(0, attrString.length)) label.attributedText = attrString 

Swift 3

 let label = UILabel() let stringValue = "Set\nUILabel\nline\nspacing" let attrString = NSMutableAttributedString(string: stringValue) var style = NSMutableParagraphStyle() style.lineSpacing = 24 // change line spacing between paragraph like 36 or 48 style.minimumLineHeight = 20 // change line spacing between each line like 30 or 40 attrString.addAttribute(NSParagraphStyleAttributeName, value: style, range: NSRange(location: 0, length: stringValue.characters.count)) label.attributedText = attrString 

Este chico creó una clase para obtener la altura de línea (sin utilizar CoreText, como biblioteca MTLabel): https://github.com/LemonCake/MSLabel

Lo mejor que encontré es: https://github.com/mattt/TTTAttributedLabel

Es una subclase UILabel, así que puede simplemente colocarla y luego cambiar la altura de la línea:

 myLabel.lineHeightMultiple = 0.85; myLabel.leading = 2; 

Encontré Bibliotecas de terceros como esta:

https://github.com/Tuszy/MTLabel

Para ser la solución más fácil.

Aquí hay un código rápido para que establezca el espaciado entre líneas mediante progtwigción

 let label = UILabel() let attributedText = NSMutableAttributedString(string: "Your string") let paragraphStyle = NSMutableParagraphStyle() //SET THIS: paragraphStyle.lineSpacing = 4 //OR SET THIS: paragraphStyle.lineHeightMultiple = 4 //Or set both :) let range = NSMakeRange(0, attributedText.length) attributedText.addAttributes([NSParagraphStyleAttributeName : paragraphStyle], range: range) label.attributedText = attributedText 

Por supuesto, la respuesta de Mike no funciona si pasas la cadena programáticamente. En este caso, debe pasar una cadena atribuida y cambiar su estilo.

 NSMutableAttributedString * attrString = [[NSMutableAttributedString alloc] initWithString:@"Your \nregular \nstring"]; NSMutableParagraphStyle *style = [[NSMutableParagraphStyle alloc] init]; [style setLineSpacing:4]; [attrString addAttribute:NSParagraphStyleAttributeName value:style range:NSMakeRange(0, attrString.length)]; _label.attributedText = attrString;