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