UITextView, который становится прокручиваемым после достижения максимальной высоты в Swift - PullRequest
1 голос
/ 24 октября 2019

У меня в настоящее время есть прокручиваемый UITextView, который динамически расширяется, чтобы вместить любой текст. Тем не менее, мне трудно понять, как остановить увеличение размера текстового представления, если оно становится больше заданной высоты - в какой момент я бы хотел, чтобы оно стало прокручиваемым.

Изображение

Пример

Зеленый: largeParentView

Желтый: parentViewContainer

Голубой: randomLabel

Красный: myTextView

Настройка myTextView

myTextView.translatesAutoresizingMaskIntoConstraints = false
myTextView.text = "This is a large chunck that has no meaning, especially to everyone reading this."
myTextView.isScrollEnabled = false        

parentViewContainer.addSubview(myTextView)

Ограничения

parentViewContainer.leadingAnchor.constraint(equalTo: biggerParentView.leadingAnchor, constant: 0).isActive = true
parentViewContainer.trailingAnchor.constraint(equalTo: biggerParentView.trailingAnchor, constant: 0).isActive = true
parentViewContainer.topAnchor.constraint(equalTo: randomLabel.topAnchor).isActive = true
parentViewContainer.bottomAnchor.constraint(equalTo: myTextView.bottomAnchor).isActive = true

randomLabel.leadingAnchor.constraint(equalTo: parentViewContainer.leadingAnchor, constant: 15).isActive = true
randomLabel.trailingAnchor.constraint(equalTo: parentViewContainer.trailingAnchor, constant: -15).isActive = true
randomLabel.heightAnchor.constraint(equalToConstant: 50).isActive = true

myTextView.leadingAnchor.constraint(equalTo: parentViewContainer.leadingAnchor, constant: 15).isActive = true
myTextView.trailingAnchor.constraint(equalTo: parentViewContainer.trailingAnchor, constant: -15).isActive = true
myTextView.topAnchor.constraint(equalTo: randomLabel.bottomAnchor, constant: 20).isActive = true

Вопрос

Текущий пример работает для коротких текстов, но если я собираюсь изменить текст в myTextView на Повесть о двух городах , myTextView вместе с parentViewContainer расширитсянавсегда за кадром. Как я могу гарантировать, что myTextView и его родительский элемент могут только динамически расширяться, и в этот момент myTextView станет прокручиваемым?

1 Ответ

0 голосов
/ 02 ноября 2019

Спасибо Мэтт за указание в правильном направлении. Ключ должен поместить логику в viewDidLayoutSubviews ().

var myTextViewHeightConstraint: NSLayoutConstraint!

override func viewDidLoad() {
    myTextViewHeightConstraint = NSLayoutConstraint(item: myTextView, attribute: .height, relatedBy: .equal, toItem: nil, attribute: .notAnAttribute, multiplier: 0.0, constant: 0)
    myTextViewHeightConstraint.isActive = false
}

override func viewDidLayoutSubviews() {
    let h = self.myTextView.contentSize.height
    let limit = self.myTextView.frame.height - randomLabel.frame.height - 20 //20 is the distance constraint between randomLabel and myTextView

    if h > limit && !self.myTextView.isScrollEnabled {
           self.myTextView.isScrollEnabled = true
           self.myTextViewHeightConstraint.constant = limit
           self.myTextViewHeightConstraint.isActive = true
           }

     else if h < limit && self.myTextView.isScrollEnabled {     
           self.myTextView.isScrollEnabled = false
           self.myTextViewHeightConstraint.isActive = false
     }
   }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...