UITextView内容大小未随字体大小更改而更新

时间:2015-07-23 10:31:52

标签: ios xcode swift uitextview contentsize

我这里有这个功能,每次我的 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的可编辑属性已关闭。打开它为我修好了。

0 个答案:

没有答案