2016-05-23 3 views
0

В Swift у меня есть UITextField на ячейке просмотра таблицы, а когда текст слишком длинный, я хотел бы уменьшить размер шрифта. Я хочу четко указать, что я говорю о UITextField, а не UILabel или UITextView. Причина, по которой я говорю это, состоит в том, что я видел этот вопрос несколько раз, и ответы были основаны на UILabel вместо UITextField.Не удается получить UITextField для автосохранения шрифта

Я надеялся, что может быть сделано в IB, где я сделал это settinngs из Min Размер шрифта и Ajust, чтобы соответствовать, но didn't ничего менять:

enter image description here

Есть еще один способ разрешить это?

+1

Возможный дубликат [Невозможно получить UITextField в Autoshrink текст] (http://stackoverflow.com/questions/16350045/cant-get-uitextfield-to-autoshrink-text) – sschale

+1

этот вопрос ** не ** duplicate, потому что это означает ** Swift ** –

ответ

4
extension UITextField { 
    internal func resizeText() { 
    if let text = self.text{ 
     self.font = UIFont.systemFontOfSize(14) 
     let textString = text as NSString 
     var widthOfText = textString.sizeWithAttributes([NSFontAttributeName : self.font!]).width 
     var widthOfFrame = self.frame.size.width 
     // decrease font size until it fits 
     while widthOfFrame - 5 < widthOfText { 
     let fontSize = self.font!.pointSize 
     self.font = self.font?.fontWithSize(fontSize - 0.5) 
     widthOfText = textString.sizeWithAttributes([NSFontAttributeName : self.font!]).width 
     widthOfFrame = self.frame.size.width 
     } 
    } 
    } 
} 

На основании ответа я связан, я создал расширение для UITextField, которая автоматически изменяет размер текста - чтобы он правильно изменять размер текста каждый раз, он должен быть вызван в ряде мест:

  • override func drawRect(rect: CGRect) (я не нашел лучшего места, чтобы назвать это, как вы должны ждать, пока ее границы не установлены, и жизненный цикл ТВЦ получает запутанным)

  • textField(textField: UITextField, shouldChangeCharactersInRange...

+0

работает отлично в shouldChangeCharactersInRange() Большое спасибо! @sschale –

Смежные вопросы