我有一个UITableViewCell,里面有一个UITextView。 UITextView已添加到情节提要中,并且设置了所有必要的约束。 UITextView的高度应该响应内部的内容,但只能响应最大高度,然后UITextView应该停止增长并且可以滚动。 我已经将其与下面的代码进行了归档。我的问题是,如果我再次从UITextView中删除行,则UITextView不会缩小或缩小,因此高度太小。我该怎么办?
/// Check if height of UITextView is bigger than maximum
if Int(textView.frame.size.height) >= 75 {
textView.isScrollEnabled = true
textView.frame.size.height = 74
}
else {
textView.isScrollEnabled = false
/// Change the UITableViewCells height if the UITextView did change
let currentOffset = controller.tableView.contentOffset
UIView.setAnimationsEnabled(false)
controller.tableView.beginUpdates()
controller.tableView.endUpdates()
UIView.setAnimationsEnabled(true)
controller.tableView.setContentOffset(currentOffset, animated: false)
}
答案 0 :(得分:1)
我决定试一试,效果很好。这是针对仅返回1行的UITableView,因此您需要做更多的工作来跟踪真实应用中的单元格。
这是UITableViewCell类:
import UIKit
class Cell: UITableViewCell {
@IBOutlet weak var textView: UITextView!
}
Cell.xib内容视图仅包含UITextView。我将行高设置为44,然后将TextView.top =顶部,底部= TextView.bottom,trailing = TextView.trailing + 36,TextView.leading =前导+ 36的约束设置为36。重要的是,我只想在侧面留些空间。
这是整个ViewController:
import UIKit
class ViewController: UIViewController, UITableViewDelegate, UITableViewDataSource, UITextViewDelegate {
@IBOutlet weak var tableView: UITableView!
private var textViewHeight: CGFloat = 0.0
override func viewDidLoad() {
super.viewDidLoad()
tableView.delegate = self
tableView.dataSource = self
tableView.rowHeight = 44
tableView.tableFooterView = UIView()
tableView.register(UINib(nibName: "Cell", bundle: nil), forCellReuseIdentifier: "cell")
}
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return 1
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath) as! Cell
cell.textView.delegate = self
cell.textView.text = ""
cell.textView.layer.borderColor = UIColor.lightGray.cgColor
cell.textView.layer.borderWidth = 1
cell.textView.layer.cornerRadius = 4
return cell
}
func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
return min(75, max(textViewHeight, 44))
}
func textViewDidChange(_ textView: UITextView) {
let size = textView.bounds.size
let newSize = textView.sizeThatFits(CGSize(width: size.width, height: CGFloat.greatestFiniteMagnitude))
if size.height != newSize.height {
textViewHeight = newSize.height
UIView.setAnimationsEnabled(false)
tableView.beginUpdates()
tableView.endUpdates()
UIView.setAnimationsEnabled(true)
}
}
}