我希望在键入长字符串时使textview像whatsapp
一样调整textview的高度。但是一旦达到最大高度,textview将保持最大高度,textview变为可滚动。回复邮件时,它与whatsapp
的文本视图完全相同。
我找到了一种动态调整大小的方法,但是当我将textView.isScrollEnabled = true
设置为达到最大高度时,textview将缩小但可以滚动。
如何使textview与whatsapp
的textview完全相同?
override func viewDidLoad() {
super.viewDidLoad()
NotificationCenter.default.addObserver(self, selector: #selector(updateHeight), name: NSNotification.Name.UITextViewTextDidChange, object: nil)
textView.isScrollEnabled = false
// ...
}
func updateHeight() {
var contentSize = textView.sizeThatFits(textView.bounds.size)
contentSize.width = UIScreen.main.bounds.width
if contentSize.height > UIScreen.main.bounds.height / 5{
textView.isScrollEnabled = true
contentSize.height = UIScreen.main.bounds.height / 5
} else {
textView.isScrollEnabled = false
}
textView.frame.size = contentSize
}
答案 0 :(得分:1)
extension ViewController : UITextViewDelegate{
func textView(_ textView: UITextView, shouldChangeTextIn range: NSRange, replacementText text: String) -> Bool{
let cursorPosition = self.textView.caretRect(for: self.tvChat.selectedTextRange!.start).origin
let currentLine = Int(cursorPosition.y / self.tvChat.font!.lineHeight)
UIView.animate(withDuration: 0.3) {
if currentLine == 0 {
self.constraintHeightTextView.constant = 56
}else {
self.constraintHeightTextView.constant = self.textView.contentSize.height + 8 // Padding
}
}
self.textView.layoutIfNeeded()
self.view.updateConstraints()
}
}
self.constraintHeightTextView 是textview高度限制的出口。
当文本在textview中更改时,您可以计算当前正在处理的文本行,并将其约束更新为默认值(在我的情况下为56),如果 currentLine 为0,则将其设置为textView。 contentSize.height。
希望有所帮助
答案 1 :(得分:0)
var textViewContentSize = textView.sizeThatFits(textView.bounds.size)
这将返回UITextView
所需的最小尺寸,以显示其中的所有内容。
以及代码下面的限制使用
if textViewContentSize.height > 200{
textViewContentSize = CGSize(width: textViewContentSize.height, height: 200)
}
现在您的textview
框架如下,
textView.frame = CGRect(origin: textView.frame.origin, size: textViewContentSize)
希望它对你有所帮助。