在Swift中,我在表格视图单元格上有一个 UITextField ,当文本变得太长时,我希望字体大小减小。我想说清楚我说的是UITextField,而不是UILabel或UITextView。我说这个的原因是因为我看到这个问题多次弹出,答案都是基于UILabel而不是UITextField。
我希望,这可以在IB中完成,我在这里完成了Min Font Size的设置并且只是适合,但这并没有改变任何东西:
还有另一种解决方法吗?
答案 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...