Я пытаюсь увеличить текстовое представление и сделать его прокручиваемым при некотором размере содержимого. Что я делаю:
func textViewDidChange(_ textView: UITextView) {
if textView.contentSize.height > 100 && !textView.isScrollEnabled {
let frame = textView.frame
textView.isScrollEnabled = true
let heightConstraint: NSLayoutConstraint = .init(item: textView, attribute: .height, relatedBy: .equal, toItem: nil, attribute: .notAnAttribute, multiplier: 1, constant: frame.height)
heightConstraint.identifier = "height"
textView.addConstraint(heightConstraint)
}
if textView.contentSize.height < 100 && textView.isScrollEnabled {
textView.isScrollEnabled = false
let heightConstraint = textView.constraints.first { constraint in
constraint.identifier == "height"
}
textView.removeConstraint(heightConstraint!)
}
print(textView.contentSize.height, textView.frame.height)
}
если размер содержимого больше 100, я включаю прокрутку и добавляю ограничение по высоте
если размер содержимого меньше 100, я отключаю прокрутку и удаляю ограничение (я ожидаю, что текстовое представление будет соответствовать его содержимому, как это обычно происходит, когда прокрутка отключена)
у меня нет проблем с включением прокрутки, но когда размер содержимого становится меньше 100, срабатывает второй оператор if, и текстовое представление по какой-то причине занимает все пространство экрана. когда я снова вызываю textViewDidChange (путем удаления или добавления чего-либо в текстовое представление), оба ifs срабатывают, и все работает так, как должно быть.
то, что я пытался сделать, это вызвать textview.sizeToFit()
и view.layoutIfNeeded()
, но безуспешно. что я здесь делаю неправильно?