我有一个带有多个UITextViews的UICollectionViewCell。当任何textViews的高度增加时,我希望UICollectionViewCell进行相同的操作

时间:2019-02-05 04:26:36

标签: ios swift uitextview uicollectionviewcell

我在一个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和标签放入唯一的单元格中,请向我展示如何做到这一点!

1 个答案:

答案 0 :(得分:0)

为什么在textViewDidChange方法中将高度设置为无穷大?

self.frame.size.height + =估计尺寸。高度

因此,现在您将边框的高度设置为无穷大,这就是为什么单元格到达屏幕底部的原因。

通过使用垂直或高度约束,可以根据组成部件的高度来更改单元格的高度。 假设我有2个TextField,一个放在另一个之上。 然后我可以说,单元格的顶部与第一个TextField的顶部相距10点,类似地,单元格的底部与第二个TextField的相距10点。

现在,如果我更改任何TextField的高度,则单元格的高度将会改变。

现在需要其他解决方案, 如果您不使用自定义单元格,则将返回UITableViewCell。您可以尝试在此处添加TextField或所需的任何组件,然后将其返回。 但是请注意在使用之前重新初始化单元格,因为dequeReusableCell将返回使用过的单元格。因此,如果该单元已经配置了TextField,并且您想添加textview,则可能要使用新的单元。