У меня есть UICollectionView, который содержит пять ячеек. Там у меня есть UIImageView, две UILabels и UITextView. Я хочу изменить высоту текстового представления на основе текста, который он содержит, поэтому после этого я могу установить высоту всей ячейки на основе высоты UITextView и надписей над ними. Позвольте мне продемонстрировать со скриншотом .
Итак, как вы можете сказать, красный фон показывает, что высота UITextView не верна. Я настроил UITextView так:
let commentTextView: UITextView = {
let textView = UITextView()
textView.translatesAutoresizingMaskIntoConstraints = false
textView.text = "This is just some text to act as a description"
textView.textContainerInset = UIEdgeInsets(top: 0, left: -4, bottom: 0, right: 0)
textView.font = UIFont.systemFont(ofSize: 16.0)
textView.textColor = UIColor.darkGray
textView.isEditable = false
textView.isSelectable = false
textView.backgroundColor = UIColor.red
textView.frame.size.width = (UIScreen.main.bounds.width - 16 - 16 - 60 - 8)
let numberOfLines = (textView.contentSize.height / textView.font!.lineHeight)
var textViewHeight = (textView.font?.lineHeight)! * floor(numberOfLines)
textView.frame.size.height = textViewHeight
return textView
}()
Это не создает неправильную высоту, я думаю. Я думаю, что проблема может быть найдена в моих ограничениях, которые имеют ограничение по высоте (если я удаляю его, UITextView исчезает). Если я изменю множитель (в настоящее время установлен на 0,3), у меня будут разные высоты, но я хочу, чтобы это было динамически. Так что, по моему мнению, мне нужно было бы установить динамическую переменную внутри множителя, но я не знаю, как ее составить. Может ли кто-нибудь помочь? Вот мои ограничения:
// top constraints
addConstraints([NSLayoutConstraint(item: commentTextView, attribute: .top, relatedBy: .equal, toItem: workoutLabel, attribute: .bottom, multiplier: 1, constant: 2)])
// left constraint
addConstraints([NSLayoutConstraint(item: commentTextView, attribute: .left, relatedBy: .equal, toItem: profilePictureImageView, attribute: .right, multiplier: 1, constant: 16)])
// right constraint
addConstraints([NSLayoutConstraint(item: commentTextView, attribute: .right, relatedBy: .equal, toItem: self.commentTextView.superview, attribute: .right, multiplier: 1, constant: -16)])
// height constraint
addConstraints([NSLayoutConstraint(item: commentTextView, attribute: .height, relatedBy: .equal, toItem: self, attribute: .height, multiplier: 0.3, constant: 1)])
Ура, ребята!