我在单个 UICollectionViewCell
内有 (3) UITextViews
、(1) UITextField
和 (1) UILabel
>。当文本换行到第二行时,在符合 UITextViewDelegate
协议(protocol)的扩展中,我使用 textViewDidChange
函数使所有 textView 的高度发生变化:
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
}
}
}
理想情况下,每当单元格中的任何 TextView 的高度增加时,我都希望增加单元格的高度。
我尝试放置:
self.frame.size.height += estimatedSize.height
在 ifconstraint.firstAttribute == .height
部分中,但这只会增加单元格的高度,直到它到达屏幕底部。我希望用户能够输入任意数量的文本。
每当此 textViewDidChange 更改 textView 的高度时,我是否应该使用循环来编辑单元格的高度?
我非常困惑,所以任何帮助都会很棒!提前致谢!
警告:
- 经过大量搜索,我找到了一堆答案,展示了如何动态增加单元格的高度。但是,我不知道如何在 UICollectionView 中创建独特的单元格。如果这里最优雅的解决方案是将所有 textView、textField 和标签放入唯一的单元格中,请告诉我如何做到这一点!
最佳答案
在你的textViewDidChange方法中,为什么要将高度设置为无穷大?
self.frame.size.height +=estimatedSize.height
所以,现在您将框架的高度设置为无穷大,这就是单元格到达屏幕底部的原因。
通过使用垂直或高度约束,单元格高度可以随着构成组件的高度而改变。 假设我有 2 个文本字段,一个放在另一个之上。 然后我可以说,单元格顶部距第一个 TextField 顶部 10 点,类似地单元格底部距第二个 TextField 10 点。
现在,如果我更改任何 TextField 的高度,单元格的高度将会更改。
现在对于其他解决方案, 如果您不使用自定义单元格,那么您将返回 UITableViewCell。您可以尝试添加 TextField 或任何您想要的组件,然后返回它。 但要小心在使用前重新初始化单元格,因为 dequeReusableCell 将返回使用过的单元格。因此,如果该单元格已经配置了 TextField 并且您想要添加 textview,那么您可能需要使用新的。
关于ios - 我有一个带有多个 UITextView 的 UICollectionViewCell 。当任何 textView 的高度增加时,我希望 UICollectionViewCell 执行相同的操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54527667/