我在这里有这个函数,每次我的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(没有区别)
固定的:
正如 Rory 在评论中所说,问题是 texView 的可编辑属性已关闭。打开它为我修复了它。