automática de varias líneas de la etiqueta swift

Tengo una etiqueta y me insertar texto en ella. La etiqueta tiene un tamaño, pero mi problema es este:

cuando me insertar texto en la etiqueta si el texto es más largo que la etiqueta’size aparece «….» en la etiqueta; por ejemplo:

si la cadena completa que quiero insertar en la etiqueta es este : "hello world how are you?"

en la etiqueta veo este "hello world..."

Me gustaría que la etiqueta se ajusta automáticamente.

Por esta razón por la que hice esto pero no funciona:

label!.textAlignment = NSTextAlignment.Center;
label!.numberOfLines = 0;
label!.font = UIFont.systemFontOfSize(16.0);
label!.text = "hello world how are you?"

Donde hago mal?

  • label!.lineBreakMode = NSLineBreakMode.ByWordWrapping y label!.numberOfLines = 0 son su respuesta
InformationsquelleAutor Alex | 2015-10-30

3 Kommentare

  1. 13
      label.lineBreakMode = .byWordWrapping
      label.numberOfLines = 0;

    o ajustar el tamaño de la fuente de abajo para que se ajuste a toda la cadena de

    label.adjustsFontSizeToFitWidth = true
  2. 1

    Usted no menciona si o no usted está utilizando una Pila de Vista. La manera normal de hacerlo (proporcionado por good4pc) no funciona correctamente si pones un UILabel en una Pila de Vista.

    Si usted está utilizando una pila de vista:

    Hacer una etiqueta personalizada o clase de trabajo a la derecha. Tengo una pegada a continuación – simplemente hacer un nuevo swift de archivo y coloque este código en ella. Llame a la swift archivo «MultilineLabelThatWorks». A continuación, defina la etiqueta como un «MultilineLabelThatWorks» en lugar de «UILabel»

    import UIKit
    
    class MultilineLabelThatWorks : UILabel {
    override func layoutSubviews() {
        super.layoutSubviews()
        preferredMaxLayoutWidth = bounds.width
        super.layoutSubviews()
    }
    }

    Ahora se puede establecer para ajustar el texto como se discutió por good4pc y se ajustará correctamente.

  3. 1

    Yo lo que hice fue utilizar un UILabel clase.

    Crear tu etiqueta:

     let multiLabel = LabelClass(text: "hello world how are u?", labelWidth: 250, pos: CGPoint(x: size.width / 2, y: size.height / 2))
            addChild(multiLabel)

    Ahora se hace referencia a su LabelClass archivo. Aquí está el código para que:

    import SpriteKit
    
    class GameSceneLabel : SKNode {
    
    
        //props
        var labelWidth:Int {didSet {update()}}
        var labelHeight:Int = 0
        var text:String {didSet {update()}}
        var fontName:String {didSet {update()}}
        var fontSize:CGFloat {didSet {update()}}
        var pos:CGPoint {didSet {update()}}
        var fontColor:UIColor {didSet {update()}}
        var leading:Int {didSet {update()}}
        var alignment:SKLabelHorizontalAlignmentMode {didSet {update()}}
        var dontUpdate = false
        var shouldShowBorder:Bool = false {didSet {update()}}
        //display objects
        var rect:SKShapeNode?
        var labels:[SKLabelNode] = []
    
        init(text:String, labelWidth:Int, pos:CGPoint, fontName:String="ChalkboardSE-Regular",fontSize:CGFloat=20,fontColor:UIColor=UIColor.white,leading:Int? = nil, alignment:SKLabelHorizontalAlignmentMode = .center, shouldShowBorder:Bool = false)
        {
            self.text = text
            self.labelWidth = labelWidth
            self.pos = pos
            self.fontName = fontName
            self.fontSize = fontSize
            self.fontColor = fontColor
            self.leading = leading ?? Int(fontSize)
            self.shouldShowBorder = shouldShowBorder
            self.alignment = alignment
    
    
            super.init()
    
            self.update()
        }
    
        required init?(coder aDecoder: NSCoder) {
            fatalError("init(coder:) has not been implemented")
        }
    
        //if you want to change properties without updating the text field,
        // set dontUpdate to false and call the update method manually.
        func update() {
            if (dontUpdate) {return}
            if (labels.count>0) {
                for label in labels {
                    label.removeFromParent()
                }
                labels = []
            }
            let separators = NSCharacterSet.whitespacesAndNewlines
            let words = (text as NSString).components(separatedBy: separators)
            var finalLine = false
            var wordCount = -1
            var lineCount = 0
            while (!finalLine) {
                lineCount+=1
                var lineLength = CGFloat(0)
                var lineString = ""
                var lineStringBeforeAddingWord = ""
    
                //creation of the SKLabelNode itself
                let label = SKLabelNode(fontNamed: fontName)
                //name each label node so you can animate it if u wish
                label.name = "line\(lineCount)"
                label.horizontalAlignmentMode = alignment
                label.fontSize = fontSize
                label.fontColor = fontColor
    
                while lineLength < CGFloat(labelWidth)
                {
                    wordCount+=1
                    if wordCount > words.count-1
                    {
                        //label.text = "\(lineString) \(words[wordCount])"
                        finalLine = true
                        break
                    }
                    else
                    {
                        lineStringBeforeAddingWord = lineString
                        lineString = "\(lineString) \(words[wordCount])"
                        label.text = lineString
                        lineLength = label.frame.width
                    }
                }
                if lineLength > 0 {
                    wordCount-=1
                    if (!finalLine) {
                        lineString = lineStringBeforeAddingWord
                    }
                    label.text = lineString
                    var linePos = pos
                    if (alignment == .left) {
                        linePos.x -= CGFloat(labelWidth / 2)
                    } else if (alignment == .right) {
                        linePos.x += CGFloat(labelWidth / 2)
                    }
                    linePos.y += CGFloat(-leading * lineCount)
                    label.position = CGPoint(x:linePos.x , y:linePos.y )
                    self.addChild(label)
                    labels.append(label)
                }
    
            }
            labelHeight = lineCount * leading
            showBorder()
        }
        func showBorder() {
            if (!shouldShowBorder) {return}
            if let rect = self.rect {
                self.removeChildren(in: [rect])
            }
            self.rect = SKShapeNode(rectOf: CGSize(width: labelWidth, height: labelHeight))
            if let rect = self.rect {
                rect.strokeColor = UIColor.white
                rect.lineWidth = 1
                rect.position = CGPoint(x: pos.x, y: pos.y - (CGFloat(labelHeight) / 2.0))
                self.addChild(rect)
            }
    
        }
    }

    Aquí usted puede fijar su posición, tipo de letra, tamaño de fuente, el color y todo lo que usted necesita.

    Hágamelo saber si eso ayuda

Kommentieren Sie den Artikel

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

Pruebas en línea