我希望如果用户添加文本并添加新行它应该增加高度并且如果用户删除 sometext 和一些行而不是它应该降低它的高度
为此我尝试了以下解决方案
func textViewDidChange(_ textView: UITextView) {
self.updateCharacterCount()
DispatchQueue.main.asyncAfter(deadline: .now() + .seconds(4),
execute: {
let pos = textView.endOfDocument
self.referenceOfClass?.textOfTextViewForTitle =
self.title_Name.text
let currentRect = textView.caretRect(for: pos ??
UITextPosition.init())
if (currentRect.origin.y == -1 || currentRect.origin.y ==
CGFloat.infinity){
if let val = self.indexPath{
self.referenceOfClass?.previousRectforTitle = currentRect
self.referenceOfClass?.inq_Tableview.reloadRows(at:
[val], with: .automatic)
}
}
else if currentRect.origin.y <
self.referenceOfClass?.previousRectforTitle.origin.y ?? 0.0 {
if let val = self.indexPath{
self.referenceOfClass?.previousRectforTitle = currentRect
self.referenceOfClass?.inq_Tableview.reloadRows(at:
[val], with: .automatic)
}
}
})
}
但它在这个 textView.caretRect(for: pos ?? UITextPosition.init()) 始终返回相同的值 (0,-1)
那我该如何解决呢?
我正在使用 xcode10.1,这个 textview 在 tableviewcell 中
最佳答案
你可以试试这个, 取高度约束的导出和下面的代码
@IBOutlet weak var txtMessageHeightConstraint: NSLayoutConstraint!
extension GigMessageSocketViewController:UITextViewDelegate
{
func textViewDidChange(_ textView: UITextView)
{
isClickOnSendMessage = true
let contentSize = txtMessage.sizeThatFits(CGSize(width: txtMessage.bounds.size.width, height: CGFloat(Float.greatestFiniteMagnitude)))
if textView.contentSize.height < 100.0
{
txtMessageHeightConstraint.constant = CGFloat(ceilf(Float(contentSize.height)))
textView.layoutIfNeeded()
textView.updateConstraints()
textView.scrollRangeToVisible(textView.selectedRange)
}
}
}
关于swift - 想要在输入时更改 UITextview 高度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54416357/