【问题标题】:Can't get UITextField to autoshrink the font无法让 UITextField 自动缩小字体
【发布时间】:2016-05-23 20:03:33
【问题描述】:

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

我希望这可以在 IB 中完成,我在其中设置了最小字体大小并调整为适合,但这并没有改变任何东西:

还有其他方法可以解决这个问题吗?

【问题讨论】:

标签: ios xcode autosize swift2.2


【解决方案1】:
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...

【讨论】:

  • 在 shouldChangeCharactersInRange() 中工作正常 非常感谢! @sschale
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-07-29
  • 1970-01-01
  • 1970-01-01
  • 2021-07-15
  • 1970-01-01
  • 2017-06-23
  • 2012-08-19
相关资源
最近更新 更多