获取UITextView的内容高度

时间:2018-03-08 12:05:01

标签: ios swift height uitextview

我使用这个名为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页面上打开了issue但是店主要求在这里提问。

为什么内容高度返回错误值?

顺便说一句,这是我在上面的例子中使用的project

1 个答案:

答案 0 :(得分:4)

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

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

然后相应地更新textview框架:

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