ios - 获取 UITextView 的内容高度

标签 ios swift height uitextview

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

enter image description here enter image description here

这按预期工作。

当我必须显示较少量的文本时,我的问题就出现了。如果我添加一些不超过 UITextView 高度的内容,我想隐藏更多/更少切换按钮。所以我考虑采用完整的内容高度,如果它大于 TextView 的高度,则显示切换按钮。

在上面的示例中,我添加了几个超出 TextView 边界的长段落。 TextView 的高度为 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

我打开了一个 issue在图书馆的 Github 页面上,但所有者要求在这里提问。

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

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

最佳答案

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

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

然后相应地更新 TextView 框架:

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

关于ios - 获取 UITextView 的内容高度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49172660/

相关文章:

ios - 使用 PNG 作为自定义 map iOS

Swift 在 println 的控制台中给我一条错误消息

c++ - 如何使用 Windows API 从 Windows 上的另一个应用程序获取应用程序的宽度和高度

html - 在 iOS 上的 Safari 中输入类型日期外观

iOS 钥匙串(keychain) - LAContext.setCredential(data, .applicationPassword) 在模拟器上返回 false

ios - 将 SKShader 应用于多个图层

javascript - 设置div的高度+滚动到底部

iOS 应用程序停止为 iOS 记录分析

ios - 如何在 swift 中将数组数据传递给自定义 UITableView?

jquery - 如何用jQuery计算所有浏览器中相同的高度