Varias líneas de texto en UILabel

Hay una manera de tener varias líneas de texto en UILabel como en el UITextView o debo usar el segundo lugar?

Tenga en cuenta que UILineBreakModeWordWrap ya no se utiliza en iOS 6. Ahora deberá utilizar NSLineBreakByWordWrapping = 0 Consulte la documentación aquí
marque esta Pregunta stackoverflow.com/questions/2312899/…

OriginalEl autor Ilya Suzdalnitski | 2009-06-13

25 Kommentare

  1. 755

    He encontrado una solución.

    Uno sólo tiene que añadir el siguiente código:

    //Swift
    textLabel.lineBreakMode = .ByWordWrapping //or NSLineBreakMode.ByWordWrapping
    textLabel.numberOfLines = 0 
    
    //For Swift >= 3
    textLabel.lineBreakMode = .byWordWrapping //notice the 'b' instead of 'B'
    textLabel.numberOfLines = 0
    
    //Objective-C
    textLabel.lineBreakMode = NSLineBreakByWordWrapping;
    textLabel.numberOfLines = 0;
    
    //C# (Xamarin.iOS)
    textLabel.LineBreakMode = UILineBreakMode.WordWrap;
    textLabel.Lines = 0;  

    Antigua restaurada respuesta (para la referencia y desarrolladores dispuestos a apoyar iOS por debajo de 6.0):

    textLabel.lineBreakMode = UILineBreakModeWordWrap;
    textLabel.numberOfLines = 0;

    Sobre el lado: tanto los valores enum ceder a 0 de todos modos.

    UILineBreakModeWordWrap es en realidad el defecto, de modo que usted no necesita la primera línea.
    No funciona con iOS 6.1.
    Para aquellos que utilizan swift: cell.textLabel?.lineBreakMode = NSLineBreakMode.ByWordWrapping y cell.textLabel?.numberOfLines = 0
    Gracias por la prestación de Xamarin-Código. Autocompletado de código no funciona porque eligieron para abreviar la propiedad… +1
    ¿Dónde voy a añadir este código? Sólo un principiante en xcode swift. Gracias

    OriginalEl autor Ilya Suzdalnitski

  2. 130

    Del IB, el número de líneas a 0 (se permite un número ilimitado de líneas)

    Al escribir en el campo de texto usando el IB, el uso de «alt-retorno» para insertar un retorno de carro y ir a la siguiente línea (o se puede copiar en el texto ya separados por líneas).

    [Como él, a sabiendas, se excava hasta una más-que-un-año-viejo hilo …] Una cosa que a veces deseo que yo podría hacer en IB es introducir texto sin embebido saltos de línea, establecer UILineBreakModeWordWrap y numberOfLines = 0 y, a continuación, tiene la etiqueta de tamaño automático de la altura automágicamente, a la vez que sigue el diseño del IB. Estoy pensando en el caso donde la vista se cambia de tamaño para el paisaje, donde los saltos de línea en la etiqueta podría ser problemático. O … podría estar haciendo mal uso de IB! Tal vez tener las etiquetas de tamaño automático dentro de IB causa más problemas de los que resuelve? (También, no se puede invocar sizeToFit en este momento de todos modos.)
    El «0» cosa que yo recibí de la documentación para el UILabel, el alt-retorno de un amigo que ha estado utilizando el Interface Builder para muchos años.
    +1 por ser la única respuesta a la mención de «alt-retorno». En particular, «ctrl-retorno» parece que va a funcionar, pero no.

    OriginalEl autor Kendall Helmstetter Gelner

  3. 51

    La mejor solución que he encontrado (a un problema frustrante que debe haber sido resueltos en el marco) es similar a la vaychick.

    Acaba de establecer el número de líneas a 0 en cualquiera de IB o código

    myLabel.numberOfLines = 0;

    Esto mostrará las líneas necesarias, pero volverá a colocar la etiqueta de manera que sus centrado horizontalmente (de modo que una línea 1 y la línea 3 de la etiqueta están alineados en su posición horizontal). Para solucionar que agregar:

    CGRect currentFrame = myLabel.frame;
    CGSize max = CGSizeMake(myLabel.frame.size.width, 500);
    CGSize expected = [myString sizeWithFont:myLabel.font constrainedToSize:max lineBreakMode:myLabel.lineBreakMode]; 
    currentFrame.size.height = expected.height;
    myLabel.frame = currentFrame;
    Resolver mi Consulta con la ayuda de ustedes y @Ilya Suzdalnitski. Muchas gracias.

    OriginalEl autor Michael Michailidis

  4. 31

    Usar esto para tener varias líneas de texto en UILabel:

    textLabel.lineBreakMode = NSLineBreakByWordWrapping;
    textLabel.numberOfLines = 0;

    Swift:

    textLabel.lineBreakMode = .byWordWrapping
    textLabel.numberOfLines = 0

    OriginalEl autor Abi

  5. 15

    Si usted tiene que utilizar el:

    myLabel.numberOfLines = 0;

    de la propiedad, también puede utilizar un estándar de salto de línea ("\n"), en el código, para forzar una nueva línea.

    OriginalEl autor Tim Maher-De Troyer

  6. 13

    Puede utilizar \r para ir a la siguiente línea, mientras que llenar el UILabel utilizando NSString.

    UILabel * label;
    
    
    label.text = [NSString stringWithFormat:@"%@ \r %@",@"first line",@"seconcd line"];

    OriginalEl autor prajul

  7. 12

    vamos a tratar este

    textLabel.lineBreakMode = NSLineBreakModeWordWrap; //UILineBreakModeWordWrap deprecated     
    textLabel.numberOfLines = 0;                          
    también esto se puede establecer a lo largo del IB ‘Líneas’ atributo a 0 en UILabel.

    OriginalEl autor user40910

  8. 10
    textLabel.lineBreakMode = UILineBreakModeWordWrap;
    textLabel.numberOfLines = 0;

    La solución anterior no funciona en mi caso. Estoy haciendo como este:

    - (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
    {
        //...
    
        CGSize size = [str sizeWithFont:[UIFont fontWithName:@"Georgia-Bold" size:18.0] constrainedToSize:CGSizeMake(240.0, 480.0) lineBreakMode:UILineBreakModeWordWrap];
        return size.height + 20;
    }
    
    - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
    {
        UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    
        if (cell == nil)
        {
            //...
            cell.textLabel.lineBreakMode = UILineBreakModeWordWrap;
            cell.textLabel.numberOfLines = 0;
            cell.textLabel.font = [UIFont fontWithName:@"Georgia-Bold" size:18.0];
        }
    
        //...
    
        UILabel *textLabel = [cell textLabel];
        CGSize size = [text sizeWithFont:[UIFont fontWithName:@"Georgia-Bold" size:18.0]
                                            constrainedToSize:CGSizeMake(240.0, 480.0)
                                                lineBreakMode:UILineBreakModeWordWrap];
    
        cell.textLabel.frame = CGRectMake(0, 0, size.width + 20, size.height + 20);
    
        //...
    }

    OriginalEl autor bartolo-otrit

  9. 6
    UILabel *helpLabel = [[UILabel alloc] init];
    NSAttributedString *attrString = [[NSAttributedString alloc] initWithString:label];
    helpLabel.attributedText = attrString;
    //helpLabel.text = label;
    
    helpLabel.textAlignment = NSTextAlignmentCenter;
    helpLabel.lineBreakMode = NSLineBreakByWordWrapping;
    helpLabel.numberOfLines = 0;

    Para algunas de las razones de su no trabajo para mí en iOS 6, no sé por qué. He probado con y sin atribuido texto. Cualquier sugerencia.

    OriginalEl autor Rajashekar

  10. 5

    Swift 3

    Número de líneas de cero para texto dinámico de la información, que será útil para la variación de texto.

    var label = UILabel()
    let stringValue = "A label\nwith\nmultiline text."
    label.text = stringValue
    label.numberOfLines = 0
    label.lineBreakMode = .byTruncatingTail //or .byWrappingWord
    label.minimumScaleFactor = 0.8 . //It is not required but nice to have a minimum scale factor to fit text into label frame

    Varias líneas de texto en UILabel

    OriginalEl autor Krunal

  11. 3

    usted debe intentar este:

    -(CGFloat)dynamicLblHeight:(UILabel *)lbl
    {
        CGFloat lblWidth = lbl.frame.size.width;
        CGRect lblTextSize = [lbl.text boundingRectWithSize:CGSizeMake(lblWidth, MAXFLOAT)
                                                   options:NSStringDrawingUsesLineFragmentOrigin
                                                attributes:@{NSFontAttributeName:lbl.font}
                                                   context:nil];
        return lblTextSize.size.height;
    }

    OriginalEl autor Pritesh

  12. 3

    Estas cosas me ayudaron a

    Cambiar estas propiedades de UILabel

    label.numberOfLines = 0;
    label.adjustsFontSizeToFitWidth = NO;
    label.lineBreakMode = NSLineBreakByWordWrapping;

    Y mientras daba la Cadena de entrada utilice \n para mostrar diferentes palabras en diferentes líneas.

    Ejemplo :

     NSString *message = @"This \n is \n a demo \n message for \n stackoverflow" ;

    OriginalEl autor iPhoneDeveloper

  13. 2
    UILabel *labelName = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, 100, 30)];
    [labelName sizeToFit];
    labelName.numberOfLines = 0;
    labelName.text = @"Your String...";
    [self.view addSubview:labelName];
    no te olvides de añadir: [labelName setLineBreakMode:NSLineBreakByWordWrapping];

    OriginalEl autor Gaurav Gilani

  14. 2

    Puede hacerlo a través del Storyboard:

    1. Seleccione la Etiqueta en el controlador de vista de
    2. En el Atributo Inspector, aumentar el valor de la opción de Línea (Presione Alt+Cmd+4 para mostrar los Atributos del Inspector)
    3. Haga doble clic en la Etiqueta en el controlador de vista y escribir o pegar el texto
    4. Cambiar el tamaño de la Etiqueta y/o aumentar el tamaño de fuente para que el texto puede ser mostrado
    y Líneas de set a 0, de lo contrario solo se mostrará el texto que se puede poner en el número de líneas especificado, otros serán omitidos.

    OriginalEl autor OsLivon

  15. 2

    Estoy de acuerdo con Frascos Olson, NSLineBreakByWordWrapping es defecto.
    He añadido a la propiedad sizeToFit como la guía de Gurumoorthy Arumugam solucionarlo.

    Si quieres la fuente dentro de la etiqueta se ajusta para caber dentro de los límites de la etiqueta. Usted puede utilizar :

    textLabel.adjustsFontSizeToFitWidth = YES;

    Gracias a todos.

    OriginalEl autor ryan tran

  16. 1
    UILabel *textLabel = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, 150, 30)];
    [textLabel sizeToFit];
    textLabel.numberOfLines = 0;
    textLabel.text = @"Your String...";

    OriginalEl autor Gaurav Gilani

  17. 1

    Contestado ya, pero usted puede hacerlo manualmente en el guión gráfico. En virtud de los Atributos del Inspector de la Etiqueta, usted puede cambiar los Saltos de Línea a Word Wrap (o personaje de la envoltura).

    OriginalEl autor Fleija

  18. 1

    En esta función de paso de la cadena que desea asignar en la etiqueta y pasar el tamaño de la fuente en lugar de auto.activityFont y de paso ancho de la etiqueta en lugar de 235, ahora tienes la etiqueta de altura de acuerdo a su cadena.
    funcionará bien.

    -(float)calculateLabelStringHeight:(NSString *)answer
    {
        CGRect textRect = [answer boundingRectWithSize: CGSizeMake(235, 10000000) options:NSStringDrawingUsesLineFragmentOrigin attributes:@{NSFontAttributeName:self.activityFont} context:nil];
        return textRect.size.height;
    
    }

    OriginalEl autor Nripendra singh

  19. 1

    Conjunto abajo ya sea en el código o en el guión en sí

    Etiqueta.lineBreakMode = NSLineBreakByWordWrapping;
    De la etiqueta.numberOfLines = 0;

    y por favor no olvide ajustar a la izquierda, derecha, superior e inferior de las restricciones para la etiqueta de lo contrario no funcionará.

    En todas partes se dice para configurar word wrap y no.de líneas a 0. Pero todavía mina no envoltura. Ajuste a la izquierda, arriba, abajo & derecho de la restricción de hecho envoltura.

    OriginalEl autor Ankit garg

  20. 0

    En C#, esto funcionó para mí dentro de UITableViewCell.

            UILabel myLabel = new UILabel();
            myLabel.Font = UIFont.SystemFontOfSize(16);
            myLabel.Lines = 0;
            myLabel.TextAlignment = UITextAlignment.Left;
            myLabel.LineBreakMode = UILineBreakMode.WordWrap;
            myLabel.MinimumScaleFactor = 1;
            myLabel.AdjustsFontSizeToFitWidth = true;
    
           myLabel.InvalidateIntrinsicContentSize();
           myLabel.Frame = new CoreGraphics.CGRect(20, mycell.ContentView.Frame.Y + 20, cell.ContentView.Frame.Size.Width - 40, mycell.ContentView.Frame.Size.Height);
           myCell.ContentView.AddSubview(myLabel);

    Creo que el punto aquí es:-

                myLabel.TextAlignment = UITextAlignment.Left;
                myLabel.LineBreakMode = UILineBreakMode.WordWrap;
                myLabel.MinimumScaleFactor = 1;
                myLabel.AdjustsFontSizeToFitWidth = true;

    OriginalEl autor A.G

  21. 0

    Swift 4:

    label.lineBreakMode = .byWordWrapping
    
    label.numberOfLines = 0
    
    label.translatesAutoresizingMaskIntoConstraints = false
    
    label.preferredMaxLayoutWidth = superview.bounds.size.width - 10 

    OriginalEl autor Sumona Salma

  22. -1

    Este código está volviendo tamaño de la altura según el texto

    + (CGFloat)findHeightForText:(NSString *)text havingWidth:(CGFloat)widthValue andFont:(UIFont *)font
     {
        CGFloat result = font.pointSize+4;
        if (text) 
    {
            CGSize size;
    
            CGRect frame = [text boundingRectWithSize:CGSizeMake(widthValue, 999)
                                              options:NSStringDrawingUsesLineFragmentOrigin
                                           attributes:@{NSFontAttributeName:font}
                                              context:nil];
            size = CGSizeMake(frame.size.width, frame.size.height+1);
            result = MAX(size.height, result); //At least one row
        }
        return result;
    }

    OriginalEl autor Gaurav

Kommentieren Sie den Artikel

Bitte geben Sie Ihren Kommentar ein!
Bitte geben Sie hier Ihren Namen ein

Recent Articles

Python «set» con duplicados/elementos repetidos

Hay una forma estándar de representar un "conjunto" que puede contener elementos duplicados. Como yo lo entiendo, un conjunto tiene exactamente un cero o...

Python: generador de expresión vs rendimiento

En Python, ¿hay alguna diferencia entre la creación de un generador de objetos a través de un generador de expresión versus el uso de...

Cómo exportar/importar la Masilla lista de sesiones?

Hay una manera de hacer esto? O tengo que tomar manualmente cada archivo de Registro? InformationsquelleAutor s.webbandit | 2012-10-23

no distingue mayúsculas de minúsculas coincidentes en xpath?

Por ejemplo, para el xml a continuación <CATALOG> <CD title="Empire Burlesque"/> <CD title="empire burlesque"/> <CD...