无法让UITextField自动收缩字体

时间:2016-05-23 20:03:34

标签: ios xcode autosize swift2.2

在Swift中,我在表格视图单元格上有一个 UITextField ,当文本变得太长时,我希望字体大小减小。我想说清楚我说的是UITextField,而不是UILabel或UITextView。我说这个的原因是因为我看到这个问题多次弹出,答案都是基于UILabel而不是UITextField。

我希望,这可以在IB中完成,我在这里完成了Min Font Size的设置并且只是适合,但这并没有改变任何东西:

enter image description here

还有另一种解决方法吗?

1 个答案:

答案 0 :(得分: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)(我没有找到一个更好的地方来称呼它,因为你必须等到它的界限设置并且TVC生命周期变得混乱)

  • textField(textField: UITextField, shouldChangeCharactersInRange...