我有一个带有多个UITextViews的UICollectionViewCell.当任何文本视图的高度增加时,我希望UI



我在单个UICollectionViewCell中有(3)UITextViews,(1)UITextField和(1)UILabel。当文本换行到符合UITextViewDelegate协议的扩展名中带有textViewDidChange函数的第二行时,我的所有 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
}
}
}

理想情况下,每当我的单元格中的任何文本视图高度增加时,我希望它会增加单元格的高度。

我试过推杆:

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

if constraint.firstAttribute == .height部分中,但这只会增加单元格的高度,直到它到达屏幕底部。我希望用户能够输入尽可能多的文本。

每当此文本视图更改文本视图的高度时,我应该使用一个循环来编辑单元格的高度吗?

我超级难倒,所以任何帮助都会很棒!提前感谢!

警告:

  • 经过大量搜索,我找到了一堆答案,展示了如何动态增加单元格的高度。但是,我不知道如何在UICollectionView内制作独特的单元格。如果这里最优雅的解决方案是将所有文本视图、文本字段和标签放入唯一的单元格中,请告诉我如何做到这一点!

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

自.帧.大小.高度 += 估计大小.高度

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

可以使用垂直或高度约束来更改单元高度与构成组件的高度。 假设我有 2 个文本字段一个放在另一个之上。 然后我可以说,单元格顶部距离第一个文本字段的顶部 10 分,同样,单元格底部距离第二个文本字段 10 分。

现在,如果我更改任何文本字段的高度,单元格的高度将更改。

现在对于其他解决方案, 如果您不使用自定义单元格,那么您将返回 UITableViewCell。您可以尝试添加文本字段或您想要的任何组件,然后将其返回。 但请注意在使用前重新初始化单元格,因为 dequeReuseableCell 将返回使用过的单元格。因此,如果该单元格已经配置了文本字段,并且您想要添加文本视图,那么您可能需要使用新文本视图。

最新更新