Buscar..


Introducción

La clase UILabel implementa una vista de texto de solo lectura. Puede usar esta clase para dibujar una o varias líneas de texto estático, como las que podría usar para identificar otras partes de su interfaz de usuario. La clase UILabel base proporciona soporte para el estilo simple y complejo del texto de la etiqueta. También puede controlar aspectos de la apariencia, como si la etiqueta usa una sombra o dibuja con un resaltado. Si es necesario, puede personalizar aún más la apariencia de su texto por subclasificación.

Sintaxis

  • UILabel.numberOfLines: Int // obtiene o establece el número máximo de líneas que puede tener la etiqueta. 0 es ilimitado
  • UILabel.text: String? // obtener o establecer el texto que muestra la etiqueta
  • UILabel.textColor: UIColor! // obtener o establecer el color del texto en la etiqueta
  • UILabel.tintColor: UIColor! // obtener o establecer el color del tinte de la etiqueta
  • UILabel.attributedText: NSAttributedString? // obtener o establecer el texto atribuido de la etiqueta
  • UILabel.font: UIFont! // obtener o establecer la fuente del texto en la etiqueta
  • UILabel.textAlignment: NSTextAlignment // obtiene o establece la alineación del texto

Observaciones

UILabels son vistas que pueden usarse para mostrar una o varias líneas de texto. Contiene múltiples formas de estilizar el texto, como sombras, colores de texto y fuentes.

UILabels también puede mostrar Cadenas Atribuidas, que es texto + marcado en línea para aplicar estilos a partes del texto.

UILabel no cumple con el protocolo UIAppearance, por lo que no puede usar los métodos de proxy UIAppearance para personalizar la apariencia de UILabels. Vea esta discusión para más.

Referencia de desarrollador de Apple aquí

Cambio de texto en una etiqueta existente

Se puede cambiar el texto de una UILabel existente accediendo y modificando la propiedad de text de la UILabel . Esto se puede hacer directamente usando literales de String o indirectamente usando variables.

Configuración del texto con literales de String

Rápido

label.text = "the new text"

C objetivo

// Dot Notation
label.text = @"the new text";

// Message Pattern
[label setText:@"the new text"];

Configurando el texto con una variable

Rápido

let stringVar = "basic String var"
label.text = stringVar

C objetivo

NSString * stringVar = @"basic String var";

// Dot Notation
label.text = stringVar;

// Message Pattern
[label setText: stringVar];

Color de texto

Puede utilizar la propiedad textColor la etiqueta para aplicar un color de texto a todo el texto de la etiqueta.

Rápido

label.textColor = UIColor.redColor()
label.textColor = UIColor(red: 64.0/255.0, green: 88.0/255.0, blue: 41.0/225.0, alpha: 1)

Swift 3

label.textColor = UIColor.red
label.textColor = UIColor(red: 64.0/255.0, green: 88.0/255.0, blue: 41.0/225.0, alpha: 1)

C objetivo

label.textColor = [UIColor redColor];
label.textColor = [UIColor colorWithRed:64.0f/255.0f green:88.0f/255.0f blue:41.0f/255.0f alpha:1.0f];

Aplicando color de texto a una porción del texto.

También puede variar el color del texto (u otros atributos) de partes del texto usando NSAttributedString :

C objetivo

attributedString = [[NSMutableAttributedString alloc] initWithString:@"The grass is green; the sky is blue."];
[attributedString addAttribute: NSForegroundColorAttributeName value:[UIColor greenColor] range:NSMakeRange(13, 5)];
[attributedString addAttribute: NSForegroundColorAttributeName value:[UIColor blueColor] range:NSMakeRange(31, 4)];
label.attributedText = attributesString;

Rápido

let attributedString = NSMutableAttributedString(string: "The grass is green; the sky is blue.")
attributedString.addAttribute(NSForegroundColorAttributeName, value: UIColor.green(), range: NSRange(location: 13, length: 5))
attributedString.addAttribute(NSForegroundColorAttributeName, value: UIColor.blue(), range: NSRange(location: 31, length: 4))
label.attributedText = attributedString

Alineación del texto

Rápido

label.textAlignment = NSTextAlignment.left 
//or the shorter
label.textAlignment = .left 

Cualquier valor en el NSTextAlignment enumeración es válido: .left , .center , .right , .justified , .natural

C objetivo

label.textAlignment = NSTextAlignmentLeft;

Cualquier valor en la enumeración NSTextAlignment es válido: NSTextAlignmentLeft , NSTextAlignmentCenter , NSTextAlignmentRight , NSTextAlignmentJustified , NSTextAlignmentNatural

La alineación vertical en UILabel no se admite fuera de la caja: alinear verticalmente el texto con la parte superior dentro de una UILabel

Crea una UILabel

Con un marco

Cuando conoce las dimensiones exactas que desea establecer para su etiqueta, puede inicializar un UILabel con un marco CGRect .

Rápido

let frame = CGRect(x: 0, y: 0, width: 200, height: 21)
let label = UILabel(frame: frame)
view.addSubview(label)

C objetivo

CGRect frame = CGRectMake(0, 0, 200, 21);
UILabel *label = [[UILabel alloc] initWithFrame:frame];
[view addSubview:label];

Con diseño automático

Puede agregar restricciones en una UILabel cuando desee que iOS calcule dinámicamente su marco en tiempo de ejecución.

Rápido

let label = UILabel()
label.backgroundColor = .red
label.translatesAutoresizingMaskIntoConstraints = false
view.addSubview(label)

NSLayoutConstraint.activate([
    //stick the top of the label to the top of its superview:
    label.topAnchor.constraint(equalTo: view.topAnchor)

    //stick the left of the label to the left of its superview
    //if the alphabet is left-to-right, or to the right of its 
    //superview if the alphabet is right-to-left:
    label.leadingAnchor.constraint(equalTo: view.leadingAnchor)

    //stick the label's bottom to the bottom of its superview:
    label.bottomAnchor.constraint(equalTo: view.bottomAnchor)

    //the label's width should be equal to 100 points:
    label.widthAnchor.constraint(equalToConstant: 100)
])

C objetivo

UILabel *label = [[UILabel alloc] init];

Con Objective-c + Visual Format Language (VFL)

  UILabel *label = [UILabel new];
  label.translatesAutoresizingMaskIntoConstraints = NO;
  [self.view addSubview label];
  // add horizontal constraints with 5 left and right padding from the leading and trailing

  [self.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|-5-[labelName]-5-|"
                                                                    options:0
                                                                    metrics:nil
                                                                      views:@{@"labelName":label}]];
  // vertical constraints that will use the height of the superView with no padding on top and bottom
  [self.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|[labelName]|"
                                                                    options:0
                                                                    metrics:nil
                                                                      views:@{@"labelName":label}]]

La documentación de VFL se puede encontrar aquí

Una vez creada la etiqueta, asegúrese de establecer las dimensiones a través del diseño automático. Xcode mostrará errores si se hace incorrectamente.

Con Interface Builder

También utiliza Interface Builder para agregar una UILabel a su archivo Storyboard o .xib arrastrando una Label desde el panel Biblioteca de objetos y soltándola en una vista en el lienzo:

Captura de pantalla de Interface Builder

En lugar de especificar un marco (posición y tamaño) para un UILabel programación, un Storyboard o un .xib permite usar Diseño automático para agregar restricciones al control.

Para acceder a esta etiqueta creada desde el storyboard o xib cree un IBOutlet de esta etiqueta.

Enlace entre Interface Builder y View Controller

Una vez que haya agregado una UILabel a su Storyboard o .xib el archivo, puede vincularlo a su código presionando Control ⌃ y luego arrastrando el mouse entre la UILabel a su ViewController , o puede arrastrar el código mientras hace clic derecho para tienen el mismo efecto

introduzca la descripción de la imagen aquí

En el cuadro de diálogo de propiedades, puede establecer el nombre de UILabel y establecerlo como strong o weak . Para más información sobre strong y weak , vea esto ,

La otra forma es hacer la salida programáticamente de la siguiente manera:

Rápido

@IBOutlet weak var nameLabel : UILabel!

C objetivo

@property (nonatomic, weak) IBOutlet UILabel *nameLabel;

Establecer fuente

Rápido

let label = UILabel()

C objetivo

UILabel *label = [[UILabel alloc] init];
or
UILabel *label = [UILabel new]; // convenience method for calling alloc-init

Cambiar el tamaño de la fuente por defecto

Rápido

label.font = UIFont.systemFontOfSize(17)

Swift 3

label.font = UIFont.systemFont(ofSize: 17)

C objetivo

label.font = [UIFont systemFontOfSize:17];

Use un peso de fuente específico

iOS 8.2

Rápido

label.font = UIFont.systemFontOfSize(17, weight: UIFontWeightBold)

Swift3

label.font = UIFont.systemFont(ofSize: 17, weight: UIFontWeightBold)

C objetivo

label.font = [UIFont systemFontOfSize:17 weight:UIFontWeightBold];
iOS 8.2

Rápido

label.font = UIFont.boldSystemFontOfSize(17)

Swift3

label.font = UIFont.boldSystemFont(ofSize: 17)

C objetivo

label.font = [UIFont boldSystemFontOfSize:17];

Utilice un estilo de texto de tipo dinámico.

La fuente y el tamaño en puntos se basarán en el tamaño de lectura preferido del usuario.

Rápido

label.font = UIFont.preferredFontForTextStyle(UIFontTextStyleBody)

Swift 3

label.font = UIFont.preferredFont(forTextStyle: .body)

C objetivo

label.font = [UIFont preferredFontForTextStyle:UIFontTextStyleBody];

Use una fuente diferente por completo

Rápido

label.font = UIFont(name: "Avenir", size: 15)

C objetivo

label.font = [UIFont fontWithName:@"Avenir" size:15];

Anular tamaño de fuente

Una forma de establecer el tamaño de fuente sin saber la familia de fuentes es utilizar la propiedad de fuente de UILabel .

Rápido

label.font = label.font.fontWithSize(15)

Swift 3

label.font = label.font.withSize(15)

C objetivo

label.font = [label.font fontWithSize:15];

Usar fuente personalizada Swift

Consulte este enlace

Número de líneas

Cuando haga una etiqueta y configure su texto para que sea más de una línea que pueda mostrar, se truncará y verá solo una línea de texto que termina con tres puntos (...). Esto se debe a que una propiedad llamada numberOfLines se establece en 1 y, por lo tanto, solo se mostrará una línea. Es un error común en el manejo de UILabel s, y muchas personas lo consideran como un error, o pueden usar más de una etiqueta para mostrar más de una línea de texto, pero solo editando esta propiedad, podemos decirle a UILabel que Acepta hasta el número especificado de líneas. Por ejemplo, si esta propiedad se establece en 5, la etiqueta puede mostrar 1, 2, 3, 4 o 5 líneas de datos.

Configurando el valor programáticamente

Para establecer esta propiedad, simplemente asigne un nuevo número entero:

Rápido

label.numberOfLines = 2

C objetivo

label.numberOfLines = 2;

Nota

Es posible establecer esta propiedad en 0. Sin embargo, esto no significa que no acepte ninguna línea, sino que la etiqueta puede tener tantas líneas como sea necesario (también conocido como "Infinito"):

Rápido

label.numberOfLines = 0

C objetivo

label.numberOfLines = 0;

Nota

Si la etiqueta tiene una restricción de altura, la restricción se respetará. En este caso, label.numberOfLines = 0 puede no funcionar como se esperaba.

Nota

Para un texto de líneas múltiples más complejo, UITextView puede ser un mejor ajuste. *

Estableciendo el valor en el Interface Builder

En lugar de configurar numberOfLines programación, puede usar un Storyboard o un .xib y establecer la propiedad numberOfLines . De esa manera, logramos los mismos resultados que el código anterior.

Al igual que a continuación:

introduzca la descripción de la imagen aquí

Tamaño para caber

Supongamos que tiene una UILabel en su storyboard y que ha creado un IBOutlet para él en ViewController.swift / ViewController.m y lo ha llamado labelOne .

Para hacer que los cambios sean fácilmente visibles, cambie el backgroundColor y el textColor de labelOne en el método viewDidLoad :

La función sizeToFit se utiliza cuando desea cambiar automáticamente el tamaño de una etiqueta en función del contenido almacenado en ella.

Rápido

labelOne.backgroundColor = UIColor.blueColor()
labelOne.textColor = UIColor.whiteColor()
labelOne.text = "Hello, World!"
labelOne.sizeToFit()

Swift 3

labelOne.backgroundColor = UIColor.blue
labelOne.textColor = UIColor.white
labelOne.text = "Hello, World!"
labelOne.sizeToFit()

C objetivo

labelOne.backgroundColor = [UIColor blueColor];
labelOne.textColor = [UIColor whiteColor];
labelOne.text = @"Hello, World!";
[labelOne sizeToFit];

La salida para el código anterior es:

introduzca la descripción de la imagen aquí

Como puede ver, no hay cambios, ya que el texto se ajusta perfectamente a labelOne. sizeToFit solo cambia el marco de la etiqueta.

Cambiemos el texto a uno un poco más largo:

labelOne.text = "Hello, World! I’m glad to be alive!"

Ahora, labelOne se ve así:

introduzca la descripción de la imagen aquí

Incluso llamando a sizeToFit no cambia nada. Esto se debe a que, de forma predeterminada, el número de lineas mostradas por UILabel se establece en 1. Vamos a cambiarlo a cero en el guión gráfico:

introduzca la descripción de la imagen aquí

Esta vez, cuando ejecutamos la aplicación, labelOne aparece correctamente:

introduzca la descripción de la imagen aquí

La propiedad numberOfLines también se puede cambiar en el archivo ViewController :

// Objective-C
labelOne.numberOfLines = 0; 

// Swift
labelOne.numberOfLines = 0

Color de fondo

Rápido

label.backgroundColor = UIColor.redColor()

label.backgroundColor = .redColor()

Swift 3

label.backgroundColor = UIColor.red

C objetivo

label.backgroundColor = [UIColor redColor];

Añadir sombras al texto

Rápido

label1.layer.shadowOffset = CGSize(width: 3, height: 3)
label1.layer.shadowOpacity = 0.7
label1.layer.shadowRadius = 2

Swift 3

label1.layer.shadowOffset = CGSize(width: 3, height: 3)
label1.layer.shadowOpacity = 0.7
label1.layer.shadowRadius = 2

C objetivo

label1.layer.shadowOffset = CGSizeMake(3, 3);
label1.layer.shadowOpacity = 0.7;
label1.layer.shadowRadius = 2;

introduzca la descripción de la imagen aquí

Altura variable utilizando restricciones.

Puedes hacer una UILabel con una altura dinámica usando el diseño automático.

numberOfLines establecer numberOfLines en cero (0) y agregar una altura mínima configurando una restricción con una relación de tipo .GreaterThanOrEqual en el atributo .Height

ios 6

Rápido

label.numberOfLines = 0

let heightConstraint = NSLayoutConstraint(
    item: label,
    attribute: .Height,
    relatedBy: .GreaterThanOrEqual,
    toItem: nil,
    attribute: .NotAnAttribute,
    multiplier: 0,
    constant: 20
)

label.addConstraint(heightConstraint)
iOS 9

Rápido

label.numberOfLines = 0
label.translatesAutoresizingMaskIntoConstraints = false
label.heightAnchor.constraintGreaterThanOrEqualToConstant(20).active = true

LineBreakMode

Usando codigo

UILabel.lineBreakMode: NSLineBreakMode

Rápido

label.lineBreakMode = .ByTruncatingTail
  • .ByWordWrapping
  • .ByCharWrapping
  • .ByClipping
  • .ByTruncatingHead
  • .ByTruncatingTail
  • .ByTruncatingMiddle

Swift 3

label.lineBreakMode = .byTruncatingTail
  • .byWordWrapping
  • .byCharWrapping
  • .byClipping
  • .byTruncatingHead
  • .byTruncatingTail
  • .byTruncatingMiddle

C objetivo

[label setLineBreakMode:NSLineBreakByTruncatingTail];
  • NSLineBreakByWordWrapping
  • NSLineBreakByCharWrapping
  • NSLineBreakByClipping
  • NSLineBreakByTruncatingHead
  • NSLineBreakByTruncatingTail
  • NSLineBreakByTruncatingMiddle

Usando el guión gráfico

Esto también se puede configurar en el inspector de atributos de un UILabel:

introduzca la descripción de la imagen aquí introduzca la descripción de la imagen aquí

Constantes

  • Ajuste de palabra: el ajuste se produce en los límites de la palabra, a menos que la palabra en sí no encaje en una sola línea
  • Char Wrapping: la envoltura se produce antes del primer carácter que no encaja
  • Recorte: las líneas simplemente no se dibujan más allá del borde del contenedor de texto
  • Cabeza truncada: la línea se muestra de manera que el extremo se ajusta al contenedor y el texto que falta al principio de la línea se indica con un glifo de elipsis
  • Truncating Tail: la línea se muestra de manera que el comienzo se ajusta al contenedor y el texto que falta al final de la línea se indica con un glifo de elipsis
  • Medio truncado: la línea se muestra de manera que el inicio y el final se ajustan en el contenedor y el texto que falta en el medio se indica con un glifo de elipsis

Calcular límites de contenido (por ejemplo, alturas de celda dinámicas)

Un caso de uso común para querer calcular el marco que ocupará una etiqueta es dimensionar adecuadamente las celdas de la vista de tabla. La forma recomendada de hacer esto es usar el método NSString boundingRectWithSize:options:attributes:context:

options toma options dibujo de cadena:

  • NSStringDrawingUsesLineFragmentOrigin debe usarse para etiquetas con múltiples líneas
  • NSStringDrawingTruncatesLastVisibleLine debe agregar utilizando el | operador si hay un número máximo de líneas

attributes es un NSDictionary de atributos que afectan a las cadenas atribuidas (lista completa: Apple Docs ) pero los factores que afectan a la altura incluyen:

  • NSFontAttributeName : muy importante, el tamaño y la familia de fuentes es una parte crítica del tamaño mostrado de la etiqueta.

  • NSParagraphStyleAttributeName : para personalizar cómo se muestra el texto. Esto incluye interlineado, alineación de texto, estilo de truncamiento y algunas otras opciones. Si no cambió explícitamente ninguno de estos valores, no debería preocuparse por esto, pero puede ser importante si ha cambiado algunos valores en IB.

context debería ser nil ya que el caso de uso principal de NSStringDrawingContext es permitir que la fuente NSStringDrawingContext de tamaño para que se ajuste a un rect especificado, lo que no debería ser el caso si calculamos una altura dinámica.

C objetivo

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
    
    UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath];

    NSString *labelContent = cell.theLabel.text;
    // you may choose to get the content directly from the data source if you have done minimal customizations to the font or are comfortable with hardcoding a few values
//    NSString *labelContent = [self.dataSource objectAtIndexPath:indexPath];
    
    // value may be hardcoded if retrieved from data source
    NSFont *labelFont = [cell.theLabel font];
    
    // The NSParagraphStyle, even if you did not code any changes these values may have been altered in IB
    NSMutableParagraphStyle *paragraphStyle = [NSMutableParagraphStyle new];
    paragraphStyle.lineBreakMode = NSLineBreakByWordWrapping; 
    paragraphStyle.alignment = NSTextAlignmentCenter;

    NSDictionary *attributes = @{NSFontAttributeName: labelFont,
                                 NSParagraphStyleAttributeName: paragraphStyle};

    // The width is also important to the height
    CGFloat labelWidth = CGRectGetWidth(cell.theLabel.frame);
    // If you have been hardcoding up to this point you will be able to get this value by subtracting the padding on left and right from tableView.bounds.size.width
//    CGFloat labelWidth = CGRectGetWidth(tableView.frame) - 20.0f - 20.0f;

    CGRect bodyBounds = [labelContent boundingRectWithSize:CGSizeMake(width, CGFLOAT_MAX) options:NSStringDrawingUsesLineFragmentOrigin attributes:attributes context:nil];

    return CGRectGetHeight(bodyBounds) + heightOfObjectsOnTopOfLabel + heightOfObjectBelowLabel;
}

Swfit 3

override func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
    var cell = tableView.cellForRow(atIndexPath: indexPath)!
    var labelContent = cell.theLabel.text
    var labelFont = cell.theLabel.font
    var paragraphStyle = NSMutableParagraphStyle()

    paragraphStyle.lineBreakMode = .byWordWrapping
    paragraphStyle.alignment = .center

    var attributes = [NSFontAttributeName: labelFont, NSParagraphStyleAttributeName: paragraphStyle]

    var labelWidth: CGFloat = cell.theLabel.frame.width

    var bodyBounds = labelContent.boundingRect(withSize: CGSize(width: width, height: CGFLOAT_MAX), options: .usesLineFragmentOrigin, attributes: attributes, context: nil)

    return bodyBounds.height + heightOfObjectsOnTopOfLabel + heightOfObjectBelowLabel
}

A la inversa, si tiene un número máximo de líneas establecido, primero deberá calcular la altura de una sola línea para asegurarse de que no obtengamos un valor más alto que el tamaño permitido:

    // We calculate the height of a line by omitting the NSStringDrawingUsesLineFragmentOrigin option, which will assume an infinitely wide label
    CGRect singleLineRect = [labelContent boundingRectWithSize:CGSizeMake(CGFLOAT_MAX, CGFLOAT_MAX)
                                                 options:NSStringDrawingTruncatesLastVisibleLine
                                                 context:nil];
    CGFloat lineHeight = CGRectGetHeight(singleLineRect);
    CGFloat maxHeight = lineHeight * cell.theLabel.numberOfLines;

    // Now you can call the method appropriately
    CGRect bodyBounds = [labelContent boundingRectWithSize:CGSizeMake(width, maxHeight) options:(NSStringDrawingUsesLineFragmentOrigin|NSStringDrawingTruncatesLastVisibleLine) attributes:attributes context:nil];

    return CGRectGetHeight(bodyBounds) + heightOfObjectsOnTopOfLabel + heightOfObjectBelowLabel;

Etiqueta cliqueable

NOTA: En la mayoría de los casos, es mejor usar un UIButton lugar de hacer un UILabel que puede tocar. Solo use este ejemplo, si está seguro, que no quiere usar un UIButton por alguna razón.

  1. Crear etiqueta
  2. Habilitar la interacción del usuario
  3. Añadir UITapGestureRecognizer

La clave para crear una UILabel es habilitar la interacción del usuario.

Rápido

let label = UILabel()
label.userInteractionEnabled = true

let gesture = UITapGestureRecognizer(target: self, action: #selector(labelClicked(_:)))
label.addGestureRecognizer(gesture)

C objetivo

UILabel *label = [[UILabel alloc] init];
[label setUserInteractionEnabled:YES];

UITapGestureRecognizer* gesture = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(labelClicked:)];
[label addGestureRecognizer:gesture];

Configuración de "userInteractionEnabled" en el inspector de atributos del guión gráfico

En lugar de usar código, puede seleccionar la UILabel dentro del guión gráfico y marcar la opción:

introduzca la descripción de la imagen aquí

Marco de etiqueta dinámico de longitud de texto desconocido

A veces tenemos que cambiar el tamaño de una UILabel según el contenido dinámico en el que se desconoce la longitud del texto. En este ejemplo, el ancho de la UILabel se fija en 280 puntos y la altura es infinita, digamos 9999. Estimación del marco con respecto al estilo de texto y maximumLabelSize.

C objetivo

UILabel * label = [[UILabel alloc] init];

NSString *message = @"Some dynamic text for label";

//set the text and style if any.
label.text = message;

label.numberOfLines = 0;

CGSize maximumLabelSize = CGSizeMake(280, 9999); //280:max width of label and 9999-max height of label.

// use font information from the UILabel to calculate the size
CGSize expectedLabelSize = [label sizeThatFits:maximumLabelSize];

//Deprecated in iOS 7.0
//CGSize expectedLabelSize = [message sizeWithFont:label.font constrainedToSize:maximumLabelSize lineBreakMode:NSLineBreakByWordWrapping];

// create a frame that is filled with the UILabel frame data
CGRect newFrame = label.frame;

// resizing the frame to calculated size
newFrame.size.height = expectedLabelSize.height;

// put calculated frame into UILabel frame
label.frame = newFrame;

Rápido

var message: String = "Some dynamic text for label"
//set the text and style if any.
label.text = message
label.numberOfLines = 0
var maximumLabelSize: CGSize = CGSize(width: 280, height: 9999)
var expectedLabelSize: CGSize = label.sizeThatFits(maximumLabelSize)
// create a frame that is filled with the UILabel frame data
var newFrame: CGRect = label.frame
// resizing the frame to calculated size
newFrame.size.height = expectedLabelSize.height
// put calculated frame into UILabel frame
label.frame = newFrame

Etiqueta de texto atribuido

01. Texto subrayado: - Línea simple / doble, atravesar: - Línea simple / doble

Paso 1

Seleccione la etiqueta y cambie el tipo de etiqueta Plain to Attributed introduzca la descripción de la imagen aquí introduzca la descripción de la imagen aquí

Paso 2

Haga clic en el texto de la etiqueta y haga clic derecho

introduzca la descripción de la imagen aquí

Paso 3

Luego haga clic en Fuente -> Mostrar fuentes

introduzca la descripción de la imagen aquí

Etapa 4

Luego se mostrará la vista de fuente y haga clic en el botón de subrayado para hacer que el texto esté subrayado o haga clic en el botón de tachado para hacer que el texto aparezca tachado. Y seleccione una línea o una línea doble.

introduzca la descripción de la imagen aquí

Finalmente, haga clic en Intro y la etiqueta se mostrará subrayada o tachada según su selección.

introduzca la descripción de la imagen aquí

02. Añadir texto sombreado / efectos de fondo borroso

Obtenga la vista de fuente como se describe anteriormente y haga clic en el botón de efectos.

introduzca la descripción de la imagen aquí

Si no ve la vista previa, haga clic en Mostrar imagen en la configuración.

introduzca la descripción de la imagen aquí

Finalmente cambie la sombra y el desplazamiento de acuerdo a sus preferencias.

introduzca la descripción de la imagen aquí

Justifica el texto

Rápido

let sampleText = "Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum."

// Create label
let label = UILabel(frame: CGRectMake(0, 0, view.frame.size.width, 400))
label.numberOfLines = 0
label.lineBreakMode = NSLineBreakMode.ByWordWrapping

// Justify text through paragraph style
let paragraphStyle = NSMutableParagraphStyle()
paragraphStyle.alignment = NSTextAlignment.Justified
let attributes = [NSParagraphStyleAttributeName: paragraphStyle, NSBaselineOffsetAttributeName: NSNumber(float: 0)]
let attributedString = NSAttributedString(string: sampleText, attributes: attributes)
label.attributedText = attributedString
view.addSubview(label)

C objetivo

  NSString *sampleText = @"Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.";
    
    // Create label
    UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, self.view.frame.size.width, 400)];
    label.numberOfLines = 0;
    label.lineBreakMode = NSLineBreakByWordWrapping;
    
    
    // Justify text through paragraph style
    NSMutableParagraphStyle *paragraphStyle = [[NSMutableParagraphStyle alloc] init];
    paragraphStyle.alignment = NSTextAlignmentJustified;
    NSAttributedString *attributedString = [[NSAttributedString alloc] initWithString:sampleText attributes:@{
                    NSParagraphStyleAttributeName : paragraphStyle,
                    NSBaselineOffsetAttributeName : [NSNumber numberWithFloat:0]
                    }];
    label.attributedText = attributedString;
    [self.view addSubview:label];

Etiqueta de tamaño automático para ajustar el texto

Este ejemplo muestra cómo el ancho de una etiqueta puede redimensionarse automáticamente cuando cambia el contenido del texto.

GIF animado de etiqueta de auto-cambio de tamaño

Pin los bordes izquierdo y superior

Simplemente use el diseño automático para agregar restricciones para fijar los lados izquierdo y superior de la etiqueta.

captura de pantalla: configurar restricciones de diseño automático

Después de eso cambiará automáticamente de tamaño.

Notas

  • Este ejemplo proviene de esta respuesta de desbordamiento de pila .

  • No agregue restricciones para el ancho y la altura. Las etiquetas tienen un tamaño intrínseco basado en su contenido de texto.

  • No es necesario establecer sizeToFit cuando se utiliza el diseño automático. El código completo para el proyecto de ejemplo está aquí:

      import UIKit
      class ViewController: UIViewController {
      
          @IBOutlet weak var myLabel: UILabel!
      
          @IBAction func changeTextButtonTapped(sender: UIButton) {
              myLabel.text = "my name is really long i want it to fit in this box"
          }
      }
    
  • Este método también se puede usar para espaciar correctamente varias etiquetas horizontalmente como en este ejemplo .

gif animado que muestra el cambio de tamaño de etiqueta múltiple

  • Si desea que su etiqueta se ajuste de línea, establezca el número de líneas en 0 en IB y agregue myLabel.preferredMaxLayoutWidth = 150 // or whatever en el código. (El botón también está sujeto a la parte inferior de la etiqueta para que se mueva hacia abajo cuando la altura de la etiqueta aumenta).

captura de pantalla: redimensionamiento multilínea

Obtenga el tamaño de UILabel basado estrictamente en su texto y fuente

NSString proporciona el método boundingRectWithSize que se puede usar para predecir el CGSize resultante de un UILabel basado en su texto y fuente sin la necesidad de crear un UILabel

C objetivo

[[text boundingRectWithSize:maxSize options:(NSStringDrawingTruncatesLastVisibleLine | NSStringDrawingUsesLineFragmentOrigin) attributes:@{NSFontAttributeName: fontName} context:nil] size];

Rápido

let nsText = text as NSString?
nsText?.boundingRectWithSize(maxSize, options: [.TruncatesLastVisibleLine, .UsesLineFragmentOrigin], attributes: [NSFontAttributeName: fontName], context: nil).size

Rápido

Crear etiqueta y etiquetar salida de restricción de altura. Agregue el siguiente código donde asignará el texto a la etiqueta.

@IBOutlet var lblDescriptionHeightConstration: NSLayoutConstraint! 
@IBOutlet weak var lblDescription: UILabel!

let maxWidth = UIScreen.mainScreen().bounds.size.width - 40
let sizeOfLabel = self.lblDesc.sizeThatFits(CGSize(width: maxWidth, height: CGFloat.max))
self.lblDescriptionHeightConstration.constant = sizeOfLabel.height

Nota: "40" es el espacio del lado izquierdo y derecho de la pantalla.

Color de texto resaltado y resaltado

C objetivo

UILabel *label = [[UILabel alloc] init];
label.highlighted = YES;
label.highlightedTextColor = [UIColor redColor];

Rápido

let label = UILabel()
label.highlighted = true
label.highlightedTextColor = UIColor.redColor()

Swift 3

let label = UILabel()
label.isHighlighted = true
label.highlightedTextColor = UIColor.red


Modified text is an extract of the original Stack Overflow Documentation
Licenciado bajo CC BY-SA 3.0
No afiliado a Stack Overflow