无法让 UITextField 自动缩小字体
Can't get UITextField to autoshrink the font
在 Swift 中,我在 table 视图单元格上有一个 UITextField,当它的文本变得太长时,我希望字体大小减少。我想说得很清楚,我说的是 UITextField,而不是 UILabel 或 UITextView。之所以这么说是因为我看到这个问题弹出了好几次而且答案都是基于 UILabel 而不是 UITextField。
我希望,这可以在 IB 中完成,我在那里设置了最小字体大小并调整到适合,但这并没有改变任何东西:
还有其他方法可以解决这个问题吗?
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...
在 Swift 中,我在 table 视图单元格上有一个 UITextField,当它的文本变得太长时,我希望字体大小减少。我想说得很清楚,我说的是 UITextField,而不是 UILabel 或 UITextView。之所以这么说是因为我看到这个问题弹出了好几次而且答案都是基于 UILabel 而不是 UITextField。
我希望,这可以在 IB 中完成,我在那里设置了最小字体大小并调整到适合,但这并没有改变任何东西:
还有其他方法可以解决这个问题吗?
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...