我在单个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 将返回使用过的单元格。因此,如果该单元格已经配置了文本字段,并且您想要添加文本视图,那么您可能需要使用新文本视图。