Quería saber cuando un texto está envuelto por el marco de la vista de texto hay ningún delimitador con el que se pueda identificar si el texto se ajusta o no.

Por ejemplo, si mi vista de texto tiene un ancho de 50 px y el texto es superior a eso, se ajusta el texto a la línea siguiente.

Quería contar el número de líneas en mi vista de texto. Ahora «\n» y «\r» no están ayudando a mí.

Mi código es:

NSCharacterSet *aCharacterSet = [NSCharacterSet characterSetWithCharactersInString:@"\n\r"];
    NSArray *myArray = [textViewText componentsSeparatedByCharactersInSet:aCharacterSet];
    NSLog(@"%d",[myArray count]);
InformationsquelleAutor Abhinav | 2011-04-29

4 Comentarios

  1. 27

    Esta variación tiene en cuenta cómo cortar las líneas y el tamaño máximo de la UITextView, y la posible salida de una más precisa de la altura. Por ejemplo, si el texto no cabe truncará para el tamaño visible, y si envoltura de palabras enteras (que es el predeterminado) puede resultar en más líneas que si no lo haces.

    UIFont *font = [UIFont boldSystemFontOfSize:11.0];
    CGSize size = [string sizeWithFont:font 
                          constrainedToSize:myUITextView.frame.size 
                          lineBreakMode:UILineBreakModeWordWrap]; //default mode
    float numberOfLines = size.height / font.lineHeight;
  2. 21

    Que usted necesita para utilizar el lineHeight de la propiedad, y la fuente de la lineHeight:

    Objective-C

    int numLines = txtview.contentSize.height / txtview.font.lineHeight;

    Swift

    let numLines = (txtview.contentSize.height / txtview.font.lineHeight) as? Int

    Estoy consiguiendo el número correcto de las líneas, la esperanza es ayudar a usted también.

  3. 15

    Swift 3:

    let layoutManager:NSLayoutManager = textView.layoutManager
    let numberOfGlyphs = layoutManager.numberOfGlyphs
    var numberOfLines = 0
    var index = 0
    var lineRange:NSRange = NSRange()
    
    while (index < numberOfGlyphs) {
        layoutManager.lineFragmentRect(forGlyphAt: index, effectiveRange: &lineRange)
        index = NSMaxRange(lineRange);
        numberOfLines = numberOfLines + 1
    }
    
    print(numberOfLines)
    • Método numberOfLines() no cuenta nueva línea, a continuación, se han de primera \n símbolo. Este método es incorrecta
  4. 9

    He encontrado la solución perfecta a este problema en Apple La Disposición Del Texto Guía De Programación. Aquí está la solución de Apple proporciona:

    NSLayoutManager *layoutManager = [textView layoutManager];
    unsigned numberOfLines, index;
    unsigned numberOfGlyphs = [layoutManager numberOfGlyphs];
    NSRange lineRange;
    
    for (numberOfLines = 0, index = 0; index < numberOfGlyphs; numberOfLines++){
        (void) [layoutManager lineFragmentRectForGlyphAtIndex:index effectiveRange:&lineRange];
        index = NSMaxRange(lineRange);
    }

    Esto podría fácilmente ser escrito en una extensión de UITextView, o como un método independiente de tomar en un UITextView objeto como parámetro

    • Me gustaría esta respuesta 100 veces, para proporcionar el enlace. Observación: he utilizado un tiempo en lugar de «para». No hay más «tradicional» en Swift3, y de todos modos, la forma en que han abusado de él, hay llanura horrible.
    • Método numberOfLines() no cuenta nueva línea, a continuación, se han de primera \n símbolo. Este método es incorrecta

Dejar respuesta

Please enter your comment!
Please enter your name here