我这里有这个功能,每次我的 quoteTextView 中的文字发生变化时都会调用它:
func sizeFontToFit(){
quoteTextView.font = UIFont(name: quoteTextView.font.fontName, size: 20.0)
self.view.setNeedsLayout()
self.view.setNeedsDisplay()
self.view.layoutIfNeeded()
println("Attempting to fit \(quoteTextView.text)")
println()
println("textView frame is w: \(quoteTextView.frame.size.width) h: \(quoteTextView.frame.size.height)")
println("contentSize is w: \(quoteTextView.contentSize.width) h: \(quoteTextView.contentSize.height)")
println()
while ((quoteTextView.contentSize.height < quoteTextView.frame.size.height) && (quoteTextView.font.pointSize < 100)){
quoteTextView.font = UIFont(name: quoteTextView.font.fontName, size: quoteTextView.font.pointSize + 1)
self.view.setNeedsLayout()
self.view.setNeedsDisplay()
self.view.layoutIfNeeded()
println("font size is \(quoteTextView.font.pointSize)")
println("contentSize is w: \(quoteTextView.contentSize.width) h: \(quoteTextView.contentSize.height)")
}
println("Done resizing")
}
它应该做什么:
我希望 quoteTextView 中的文字始终覆盖整个屏幕,方法是更改其字体大小以适应。该函数从最小大小20开始,如果它没有覆盖它,那么它应该逐渐增加字体大小直到它(或达到最大大小100)。
我的问题是:
程序会识别初始文本是否确实太小。如果有足够的文字覆盖屏幕,它就应该这样做;但如果没有,那么它开始逐渐改变字体大小。问题是 quoteTextView.contentSize 在每次更改后都没有更新(println始终显示初始值)以及是否没有限制100字体大小,它只会进行无限循环。
所以最后我全部或全无。文本大小始终为最小20或完全为100。
有没有办法强制contentSize更新?如果没有,还有另一种方法吗?
修改 取代
quoteTextView.layoutSubviews()
与
self.view.setNeedsLayout()
self.view.setNeedsDisplay()
self.view.layoutIfNeeded()
其中self是持有textView的viewController (没有区别)
FIXED:
正如Rory在评论中所说,问题是texView的可编辑属性已关闭。打开它为我修好了。