2

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

4

0 に答える 0