![](/img/trans.png)
[英]How do I resize a UITableViewCell according to the size of a UITextView subView?
[英]How do I resize a UITableViewCell according to the size of a UITextView inside it?
我需要能够根据表格视图单元格中UITextView对象的高度从单元格中调整UITableViewCell的大小。 当用户在文本视图中键入更多字符时,文本视图需要增加高度,而表格视图单元格也需要增加高度以适应文本视图的高度。 我需要在没有UITableView.reloadData()的情况下执行此操作,因为当用户在其中键入更多字符时,我需要文本视图保持第一响应者的身份。
我试过使用NSLayoutConstraint.deactivate( :),NSLayoutConstraint.activate( :),contentView.updateConstraints(),contentView.updateConstraintsAsNeeded(),contentView.setNeedsUpdateConstraints(),contentView.layoutIfNeeded()和UITextView.sizeToFit()文本视图的高度和contentView上的高度的不同组合。
我没有得到它的工作。
我包括了用于表格视图单元格子类的代码。 我在尝试所有提到的代码的地方加了注释。
import UIKit
class TableViewCell: UITableViewCell {
@IBOutlet weak var textView: UITextView!
override func awakeFromNib() {
super.awakeFromNib()
textView.delegate = self
textView.textContainer.lineBreakMode = .byWordWrapping
textView.isScrollEnabled = false
}
}
extension TableViewCell: UITextViewDelegate {
func textView(_ textView: UITextView, shouldChangeTextIn range: NSRange, replacementText text: String) -> Bool {
// !!! I tried the code here !!!
return true
}
}
在表视图控制器中,我有以下代码:
override func viewDidLoad() {
super.viewDidLoad()
tableView.rowHeight = 44
tableView.rowHeight = UITableViewAutomaticDimension
tableView.estimatedRowHeight = 44
}
当我使用UITableView.reloadData()时,可以使表格视图单元格调整大小,但否则无法正常工作。
我已经查看了StackOverflow上的其他问题,但没有找到解决方案。
这有帮助
( 如何根据UITextView子视图的大小调整UITableViewCell的大小? )
但是它以非预期的方式解决了问题。 我怀疑苹果打算解决此问题的方式与我尝试过的其他方式(即使用约束)有关。
我希望有人知道我该怎么做。 任何帮助表示赞赏。
由于您已经关闭了TableViewCell
中textview
的滚动行为,因此可以在何时调用TableViewCell
到view controller
,并在文本更改时调用它。
protocol TextFieldUpdateDelegate {
func textFieldDidChangeText(_ textview: UITextView)
}
现在,在您的视图控制器的委托一致性中。
func textFieldDidChangeText(_ textView: UITextView) {
tableView.beginUpdate()
tableView.endUpdate()
}
根据文档 :
您还可以在不重新加载单元格的情况下,使用此方法以及endUpdates()方法来对行高的变化进行动画处理。
并且这应该根据textView中包含的文本来更新tableview单元格的高度。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.