gpt4 book ai didi

ios - UITextView 通过限制最大高度动态调整高度

转载 作者:行者123 更新时间:2023-12-01 16:14:52 25 4
gpt4 key购买 nike

我想让 textview 像 whatsapp在输入长字符串时调整 TextView 的高度。但是一旦达到最大高度,textview 将保持在最大高度,并且 textview 变得可滚动。与 whatsapp 完全相同回复消息时的 TextView 。

我找到了一种动态调整大小的方法,但是当我设置 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
}

enter image description here

最佳答案

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),如果 当前行为 0 否则将其设置为 textView.contentSize.height。

希望能帮助到你

关于ios - UITextView 通过限制最大高度动态调整高度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43068306/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com