2016-01-22 6 views
5

Ho un quadrato UILabel (in colore giallo) che contiene una singola lettera.Come regolare la dimensione del carattere per adattarlo all'altezza e alla larghezza di UILabel

enter image description here

Ho usato il codice da this SO answer per regolare la dimensione del carattere tale che esso si inserisce nel UILabel:

letterLabel.font = UIFont(name: letterLabel.font.fontName, size: 100) 
letterLabel.adjustsFontSizeToFitWidth = true 
letterLabel.textAlignment = NSTextAlignment.Center 

Come risulta evidente nella figura, la dimensione del carattere è secondo la larghezza. Ma dal momento che il testo è solo una lettera, quindi dobbiamo anche osservare l'altezza. Come possiamo regolare la dimensione del font in modo che l'altezza sia anche all'interno di UILabel?

+0

provare a utilizzare 'letterLabel.sizeToFit()' – b26

risposta

-3

Prova [label sizeToFit] o [label sizeThatFits:(CGSize)]

+4

Regola la dimensione dell'etichetta per adattarsi il testo, non il contrario, come è stato chiesto. –

0

non ho trovato alcuna soluzione semplice così ho fatto questa estensione:

extension UILabel { 
    func setFontSizeToFill() { 
     let frameSize = self.bounds.size 
     guard frameSize.height>0 && frameSize.width>0 && self.text != nil else {return} 

     var fontPoints = self.font.pointSize 
     var fontSize = self.text!.size(withAttributes: [NSAttributedStringKey.font: self.font.withSize(fontPoints)]) 
     var increment = CGFloat(0) 

     if fontSize.width > frameSize.width || fontSize.height > frameSize.height { 
      increment = -1 
     } else { 
      increment = 1 
     } 

     while true { 
      fontSize = self.text!.size(withAttributes: [NSAttributedStringKey.font: self.font.withSize(fontPoints+increment)]) 
      if increment < 0 { 
       if fontSize.width < frameSize.width && fontSize.height < frameSize.height { 
        fontPoints += increment 
        break 
       } 
      } else { 
       if fontSize.width > frameSize.width || fontSize.height > frameSize.height { 
        break 
       } 
      } 
      fontPoints += increment 
     } 

     self.font = self.font.withSize(fontPoints) 
    } 
}