2016-01-22 10 views
5

Ich habe ein Quadrat UILabel (in gelber Farbe), das einen einzelnen Buchstaben enthält.So passen Sie die Schriftgröße an Höhe und Breite von UILabel an

enter image description here

Ich habe den folgenden Code aus this SO answer verwendet, um die Schriftgröße einzustellen, so dass es in die UILabel passt:

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

Wie sich im Screenshot wird die Schriftgröße nach der Breite. Aber da der Text nur ein Buchstabe ist, müssen wir auch die Höhe betrachten. Wie können wir die Schriftgröße so anpassen, dass die Höhe auch innerhalb des UILabel liegt?

+0

versuchen mit 'letterLabel.sizeToFit()' – b26

Antwort

-3

Versuchen [label sizeToFit] oder [label sizeThatFits:(CGSize)]

+4

Dies passt die Größe des Etiketts zu passen der Text, nicht das Gegenteil, wie gefragt wurde. –

0

ich keine einfache Lösung gefunden, so dass ich diese Erweiterung gemacht:

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) 
    } 
} 
Verwandte Themen