在单元格中使用UITextView时,由于输入内容的不确定,无法事先确定单元格的高度(UITextView相对于单元格的约束已设定的情况),就需要根据UITextView的高度自适应单元格的高度。
方案:
1、UITextView约束的设置,我这里设置约束使用的是SnapKit;
tableViewCell.contentView.addSubview(textView)
textView.snp.makeConstraints { (make) in
make.left.equalTo(15)
make.right.equalTo(-15)
make.top.equalTo(titleLabel.snp.bottom).offset(5)
make.height.greaterThanOrEqualTo(20) // 事先设置一个高度,保证UITextView能显示出来
}
make.left.equalTo(15)
make.right.equalTo(-15)
make.top.equalTo(titleLabel.snp.bottom).offset(5)
make.height.greaterThanOrEqualTo(20) // 事先设置一个高度,保证UITextView能显示出来
}
2、实现UITextView代理方法:
func textViewDidChange(_ textView:UITextView) {var bounds:CGRect = textView.bounds
let maxSize = CGSize(width:bounds.size.width,height:1000) // height可以根据需要自己修改
let newSize = textView.sizeThatFits(maxSize)
bounds.size = newSize
self.fbmInventoryRecord?.inventoryDescirbe = textView.text
if refreshTableCallBack != nil {
refreshTableCallBack!() //回调方法,刷新单元格
}
}
3、刷新单元格:回调到单元格之后刷新
cell?.refreshTableCallBack = { [weak self] in
self?.tableView.beginUpdates()
self?.tableView.endUpdates()
}
4、最最最重要的设置:
a、UITextView一定要设置成不可以滚动,即:
textView.isScrollEnabled = false
b、必须事先给textView一个高度(约束中的代码:make.height.greaterThanOrEqualTo(20)),不然UITextView显示不出来,更不要说编辑了。