我在一个UITextViews
中有(3)UITextField
,(1)UILabel
和(1)UICollectionViewCell
。当文本使用textViewDidChange
扩展名中的UITextViewDelegate
函数换行到第二行时,我所有的textViews高度都会改变:
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的高度时,是否应该使用一个循环来编辑单元格的高度?
我很沮丧,所以任何帮助都会很棒!预先感谢!
注意:
UICollectionView
中创建唯一的单元格。如果这里最优雅的解决方案是将所有textViews,textField和标签放入唯一的单元格中,请向我展示如何做到这一点!答案 0 :(得分:0)
为什么在textViewDidChange方法中将高度设置为无穷大?
self.frame.size.height + =估计尺寸。高度
因此,现在您将边框的高度设置为无穷大,这就是为什么单元格到达屏幕底部的原因。
通过使用垂直或高度约束,可以根据组成部件的高度来更改单元格的高度。 假设我有2个TextField,一个放在另一个之上。 然后我可以说,单元格的顶部与第一个TextField的顶部相距10点,类似地,单元格的底部与第二个TextField的相距10点。
现在,如果我更改任何TextField的高度,则单元格的高度将会改变。
现在需要其他解决方案, 如果您不使用自定义单元格,则将返回UITableViewCell。您可以尝试在此处添加TextField或所需的任何组件,然后将其返回。 但是请注意在使用之前重新初始化单元格,因为dequeReusableCell将返回使用过的单元格。因此,如果该单元已经配置了TextField,并且您想添加textview,则可能要使用新的单元。