¿Es posible reducir la brecha entre el texto, cuando se colocan en varias líneas en un UILabel
? Podemos establecer el marco, el tamaño de fuente y el número de líneas. Quiero reducir la brecha entre las dos líneas en esa etiqueta.
objective-c
swift
xcode
uilabel
line-spacing
Abhinav
fuente
fuente
UILabel
, luego incruste todas las etiquetas en aStackView
. Finalmente ajustar elspacing
deStackView
. Recuerde apilarlos verticalmente.Respuestas:
Pensé en agregar algo nuevo a esta respuesta, así que no me siento tan mal ... Aquí hay una respuesta rápida :
"Respuesta corta: no puedes. Para cambiar el espacio entre líneas de texto, tendrás que subclasificar UILabel y rodar tu propio drawTextInRect, o crear múltiples etiquetas".Ver: Establecer el espaciado de línea UILabel
Esta es una respuesta muy antigua, y otras ya han agregado la nueva y mejor forma de manejar esto. Consulte las respuestas actualizadas que se proporcionan a continuación.fuente
NSAttributedString
(también disponible en las propiedades de UILable en el generador de interfaz de Xcode).NSParagraphStyle
al usar unNSAttributedString
. (Es posible que necesite hacer más pruebas de las otras propiedades modificables, pero lalineSpacing
propiedad solo le permite aumentarla).En Xcode 6 puedes hacer esto en el guión gráfico:
fuente
A partir de iOS 6, puede establecer una cadena atribuida a UILabel. Verifique lo siguiente:
fuente
attributedString
debe ser unNSMutableAttributedString
(NO NSAttributedString)NSMutableAttributedString *attributedString = [NSMutableAttributedString alloc]initWithString:@"sample text"];
lineSpacing
propiedad delNSMutableParagraphStyle
nunca es negativa, por lo que la altura de la línea no se puede reducir con este enfoque. Para responder la pregunta, debe usar otra propiedad, vea @ d.ennis answer.Las soluciones indicadas aquí no funcionaron para mí. Encontré una forma ligeramente diferente de hacerlo con iOS 6 NSAttributeString:
fuente
He hecho esta extensión simple que me funciona muy bien:
Copie esto en un archivo, para que pueda usarlo así
fuente
lineSpacing
y olvida la configuraciónlineHeightMultiple
?.lineSpacing = 1.4
y olvidarse de todo.lineHeightMultiple
...Desde Interface Builder (Storyboard / XIB):
Programáticamente:
SWift 4
Usar extensión de etiqueta
Ahora llame a la función de extensión
O usando la instancia de etiqueta (solo copie y ejecute este código para ver el resultado)
Swift 3
fuente
Ahora hay una respuesta alternativa en iOS 6, que es establecer atributeText en la etiqueta, usando un NSAttributedString con los estilos de párrafo apropiados. Consulte esta respuesta de desbordamiento de pila para obtener detalles sobre la altura de la línea con NSAttributedString:
Texto principal: altura de línea NSAttributedString, ¿verdad?
fuente
Aquí hay una clase que subclase UILabel para tener propiedad de altura de línea: https://github.com/LemonCake/MSLabel
fuente
En Swift y como función, inspirado en DarkDust
fuente
Según la respuesta de @Mike, reducir el
lineHeightMultiple
es el punto clave. Ejemplo a continuación, funciona bien para mí:fuente
Extensión útil de SWIFT 3 para establecer el espacio entre líneas más fácilmente :)
fuente
He encontrado una forma en la que puede establecer la altura real de la línea (no es un factor) e incluso se muestra en vivo en Interface Builder . Sólo tiene que seguir las siguientes instrucciones. El código está escrito en Swift 4 .
Paso # 1: crea un archivo llamado
DesignableLabel.swift
e inserta el siguiente código:Paso # 2: Coloque un
UILabel
en un Storyboard / XIB y establezca su clase enDesignableLabel
. Espere a que su proyecto se compile (¡la compilación debe tener éxito!).Paso 3: Ahora debería ver una nueva propiedad en el panel de propiedades llamada "Altura de línea". ¡Simplemente configure el valor que desee y debería ver los resultados de inmediato!
fuente
Aquí hay una subclase de UILabel que establece
lineHeightMultiple
y asegura que la altura intrínseca sea lo suficientemente grande como para no cortar el texto.fuente
En Swift 2.0 ...
Agregar una extensión:
Ahora, solo configure su UILabel como atribuidoTexto:
Obviamente, agregué un montón de parámetros que puede que no necesite. Juega un poco, siéntete libre de reescribir el método. Estaba buscando esto en un montón de respuestas diferentes, así que pensé en publicar toda la extensión en caso de que ayude a alguien ... -rab
fuente
Swift3: en una extensión UITextView o UILabel, agregue esta función:
Agregué un código para mantener el texto atribuido actual si ya está utilizando cadenas atribuidas con la vista (en lugar de sobrescribirlas).
fuente
Otra respuesta ... Si está pasando la cadena mediante programación, debe pasar una cadena atribuida en lugar de una cadena normal y cambiar su estilo. (IOS10)
fuente
Extensión Swift 3:
fuente
Esto debería ayudar con eso. Luego puede asignar su etiqueta a esta clase personalizada dentro del guión gráfico y usar sus parámetros directamente dentro de las propiedades:
fuente
Extensión de etiqueta Swift 4. Crear NSMutableAttributedString antes de pasar a la función en caso de que se requieran atributos adicionales para el texto atribuido.
fuente
Este código funcionó para mí (ios 7 y ios 8 seguro).
fuente
Aquí está mi solución en rápido. La subclase debería funcionar tanto para la propiedad atribuida de texto y texto como para characterSpacing + lineSpacing. Conserva el espacio si se establece una nueva cadena o atribuidoString.
fuente
Como una solución rápida-sucia-inteligente-simple:
Para UILabels que no tienen muchas líneas, puede usar stackViews.
Spacing
StackView a la cantidad deseada.Asegúrese de apilarlos verticalmente . Esta solución también funciona para fuentes personalizadas.
fuente