У меня есть UITextView, который динамически изменяется по высоте, когда текст набирается за пределами рамки.Однако высота изменится только после ввода полной строки и нажатия пробела.Это оставляет неловкий момент, когда пользователь не может видеть набираемое им слово.
Как я могу реагировать textViewDidChange
на каждый набранный символ, а не на ввод полной строки?
Это инициализированная переменная:
lazy var descriptionTextView: UITextView = {
let tv = UITextView()
tv.backgroundColor = .white
tv.font = UIFont.systemFont(ofSize: 18)
tv.frame = CGRect(x: 0, y: 0, width: 200, height: 40)
tv.translatesAutoresizingMaskIntoConstraints = false
tv.delegate = self
tv.isScrollEnabled = false
return tv
}()
Затем я добавляю ее в подпредставление и закрепляю в моем viewDidLoad
:
view.addSubview(descriptionTextView)
descriptionTextView.anchor(top: privacyLabel.bottomAnchor, left:
view.leftAnchor, bottom: descriptionTextViewUnderLine.topAnchor, right: view.rightAnchor, paddingTop: 16, paddingLeft: 24, paddingBottom: 0, paddingRight: 24, width: 0, height: 40)
В расширении я помещаю textViewDidChange
func textViewDidChange(_ textView: UITextView) {
let size = CGSize(width: view.frame.width, height: .infinity)
let estimatedSize = textView.sizeThatFits(size)
textView.constraints.forEach { (constraint) in
if constraint.firstAttribute == .height {
constraint.constant = estimatedSize.height
}
}
}
Заранее спасибо за помощь!