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 Comentarios

  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

Dejar respuesta

Please enter your comment!
Please enter your name here