ここにこの関数があります。これは、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 の編集可能なプロパティがオフになっていることでした。それをオンにすると修正されました。