У меня есть UICollectionViewCell с несколькими UITextViews.Когда любой из textViews увеличивается в высоте, я хочу, чтобы UICollectionViewCell делал то же самое - PullRequest
0 голосов
/ 05 февраля 2019

У меня есть (3) UITextViews, (1) UITextField и (1) UILabel в пределах одного UICollectionViewCell.У меня все textViews меняются по высоте, когда текст переносится на вторую строку с функцией textViewDidChange в расширении, соответствующем протоколу UITextViewDelegate:

    func textViewDidChange(_ textView: UITextView) {
        let size = CGSize(width: frame.width, height: .infinity)
        let estimatedSize = textView.sizeThatFits(size)
        textView.constraints.forEach { (constraint) in
            if constraint.firstAttribute == .height {
                constraint.constant = estimatedSize.height
            }
        }
    }

В идеале, всякий раз, когда любой из textViewsв моей камере увеличение высоты, я хотел бы, чтобы увеличить высоту клетки.

Я пытался поместить:

self.frame.size.height += estimatedSize.height

в раздел if constraint.firstAttribute == .height, но это только увеличивало высоту ячейки, пока она не достигла нижней части экрана.И я бы хотел, чтобы пользователь мог вводить столько текста, сколько ему хотелось бы.

Есть ли цикл, который я должен использовать для редактирования высоты ячейки всякий раз, когда этот textViewDidChange меняет высотуtextView?

Я очень тупой, так что любая помощь будет потрясающей!Заранее спасибо!

CAVEAT:

  • После многих поисков я нашел кучу ответов, которые показывают, как динамически увеличивать высоту ячейки.Тем не менее, я не знаю, как сделать уникальные клетки в пределах UICollectionView.Если наиболее элегантным решением здесь является помещение всех textViews, textField и метки в уникальные ячейки, пожалуйста, покажите мне, как это сделать!

1 Ответ

0 голосов
/ 05 февраля 2019

В вашем методе textViewDidChange почему вы устанавливаете высоту в бесконечность?

self.frame.size.height + = оценкаSize.height

Итак, теперь вы устанавливаете высоту рамки в бесконечностьВот почему ячейка достигает нижней части экрана.

Высота ячейки может быть изменена в зависимости от высоты компонента с помощью ограничения по вертикали или высоте.Скажем, у меня есть 2 TextFields, расположенные друг над другом.Тогда я могу сказать, что верхняя часть ячейки находится в 10 точках от верхней части первого TextField, и аналогично нижняя часть ячейки находится в 10 точках от второй TextField.

Теперь, если я изменю высоту любого TextField, высота ячейки будетизменить.

Теперь для другого решения, если вы не используете пользовательскую ячейку, вы будете возвращать UITableViewCell.Вы можете попытаться добавить TextField или любой другой компонент, который вам нужен, а затем вернуть его.Но будьте осторожны, чтобы повторно инициализировать ячейку перед использованием, потому что dequeReusableCell возвратит использованные ячейки.Поэтому, если эта ячейка уже настроена с TextField и вы хотите добавить текстовое представление, вы можете использовать новое.

...