2016-01-22 4 views
5

У меня есть квадрат UILabel (желтого цвета), который содержит одну букву.Как отрегулировать размер шрифта, чтобы соответствовать высоте и ширине UILabel

enter image description here

Я использовал следующий код из this SO answer, чтобы настроить размер шрифта таким образом, чтобы она помещалась в UILabel:

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

Как кажущийся на скриншоте, размер шрифта в соответствии с ширина. Но так как текст - только одна буква, поэтому нам также нужно посмотреть на высоту. Как мы можем настроить размер шрифта таким образом, чтобы высота также находилась в пределах UILabel?

+0

попробовать с помощью 'letterLabel.sizeToFit()' – b26

ответ

-3

Попробуйте [label sizeToFit] или [label sizeThatFits:(CGSize)]

+4

Это регулирует размер этикетки, чтобы соответствовать текст, а не наоборот, как было задано. –

0

я не нашел простое решение, поэтому я сделал это расширение:

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) 
    } 
} 
Смежные вопросы