在 Swift 中,我在表格 View 单元格上有一个 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...
关于ios - 无法让 UITextField 自动缩小字体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37399573/