我需要能够根据表格视图单元格中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上的其他问题,但还没有找到解决方案。
这有帮助
(How do I resize a UITableViewCell according to the size of a UITextView subView?)
但它以一种不是预期方式解决问题。我怀疑Apple打算解决这个问题的方式与我尝试过的其他方法有关,即使用约束。
我希望有人知道如何做我想做的事。任何帮助表示赞赏。
答案 0 :(得分:1)
由于您已关闭textview
中TableViewCell
的滚动行为,因此您可以在代理时调用view controller
代表,并在文字更改时调用该代理。
protocol TextFieldUpdateDelegate {
func textFieldDidChangeText(_ textview: UITextView)
}
现在在视图控制器的委托一致性中。
func textFieldDidChangeText(_ textView: UITextView) {
tableView.beginUpdate()
tableView.endUpdate()
}
根据docs:
您也可以使用此方法,然后使用endUpdates()方法为行高的更改设置动画,而无需重新加载单元格。
这应该根据textView中包含的文本更新tableview单元格的高度。