获取UITextView的内容高度

6
我使用这个名为ReadMoreTextView的开源库来显示大量文本。该库使我能够在显示文本摘录和完整内容之间切换(按钮是我添加的普通UIButton,而不是库中的)。

enter image description here enter image description here

这个能正常工作。
当我需要展示较少的文本时,问题就出现了。如果我添加一些不超过UITextView高度的内容,则希望隐藏“更多/更少”切换按钮。因此,我想到取完整内容高度,仅当其大于文本视图的高度时才显示切换按钮。
在上面的示例中,我添加了一长段超出了文本视图边界的段落。文本视图的高度为128。但内容高度也返回128。有一个特定库方法称为boundingRectForCharacterRange,它应该返回内容高度,但返回错误值(100)。
print("TEXTVIEW HEIGHT: \(textView.bounds.height)") // 128
print("CONTENT HEIGHT: \(textView.contentSize.height)") // 128

let rect = textView.layoutManager.boundingRectForCharacterRange(range: NSRange(location: 0, length: textView.text.count), inTextContainer: textView.textContainer)
print("TEXT HEIGHT: \(rect.height)") // 100

我在图书馆的Github页面上开了一个问题,但所有者要求在这里提问。
为什么内容高度返回错误的值?
顺便说一下,这是我在上面示例中使用的项目

您能使用 UILabel;因此,文本是只读的吗?看起来这个行为应该很容易实现。 - meaning-matters
1个回答

10

您可以使用以下方法来获取内容的大小:

let contentSize = self.textView.sizeThatFits(self.textView.bounds.size)

然后根据情况更新文本视图的框架:

self.textView.frame = CGRect(width: contentSize.width, height: contentSize.height)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接