获取 UITextView 的内容高度

Posted

技术标签:

【中文标题】获取 UITextView 的内容高度【英文标题】:Get the content height of a UITextView 【发布时间】:2018-08-16 18:42:54 【问题描述】:

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

这按预期工作。

当我必须显示少量文本时,我的问题就出现了。如果我添加一些不超过 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。

【问题讨论】:

你能用UILabel吗?因此,文本是只读的吗?看来这种行为应该很容易实现。 【参考方案1】:

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

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

然后相应地更新 textview 框架:

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

【讨论】:

以上是关于获取 UITextView 的内容高度的主要内容,如果未能解决你的问题,请参考以下文章

如何根据目标c中的内容设置UITextView的高度

无法更改 UIText 视图的字体(使用 Web 服务时)

在多个 UITextView 中显示长文本

获取正在输入内容在UITextView占用了多少行

从 UIText 字段的用户输入更改 UIView 框架的高度和宽度

UITextView 内容在增加高度时改变位置