我希望如果用户添加文本并添加新行,则应该增加高度,如果用户删除soometext和某些行,则应降低其高度
为此,我尝试了以下解决方案
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中
答案 0 :(得分:0)
您可以尝试一下, 在下面获取高约束的出口和代码
@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)
}
}
}
答案 1 :(得分:0)
关于如何解决此问题的我的第一个想法是创建一个自定义UITextfield,它将是一个UIView内含内容模式scaleToFill的UIView,您将使UITextfield的每个组件都变得清晰
self.textColor = UIColor.clear
self.tintColor = UIColor.clear
self.borderStyle = UITextBorderStyle.none
self.placeholder=""
和功能
func textField(_ textField:UITextField,shouldChangeCharacters在范围内:NSRange,replacementString字符串:String)-> Bool {}
您将更新UILabel文本,以便由于矛盾而自动进行缩放。