gpt4 book ai didi

ios - TableView 中的动态 TextView 高度

转载 作者:行者123 更新时间:2023-11-28 15:55:13 26 4
gpt4 key购买 nike

我的 TableView 中有 TextView,它的高度必须根据内容增加。我是这样做的

override func viewDidLoad() {
super.viewDidLoad()

tableView.estimatedRowHeight = 70
tableView.rowHeight = UITableViewAutomaticDimension
textView.delegate = self
textView.text = "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum."

}
extension TableViewController: UITextViewDelegate {
func textViewDidChange(_ textView: UITextView) {
let currentOffset = tableView.contentOffset
UIView.setAnimationsEnabled(false)
tableView.beginUpdates()
tableView.endUpdates()
UIView.setAnimationsEnabled(true)
tableView.setContentOffset(currentOffset, animated: false)
}
}

TableView 有静态单元格。已经正确地给了 TextView 约束。我在这里主要担心的是没有调用 textView 的委托(delegate)。我添加了断点来检查它。

最佳答案

使用代码手动设置 UITextView 的文本时,不会调用 textViewDidChange: 方法。 (不过,如果您设置了 TextView 的委托(delegate),则它会在用户编辑它时被调用。)

一种可能的解决方法是在您编辑文本时手动调用 textViewDidChange:。例如:

textView.delegate = self
textView.text = "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum."
self.textViewDidChange(self.textView)

有点笨拙,但它完成了工作

希望对你有帮助。

编辑

试试这个对我有用

class TableViewController: UITableViewController {

@IBOutlet weak var textView: UITextView!
override func viewDidLoad() {
super.viewDidLoad()
tableView.estimatedRowHeight = 70
tableView.rowHeight = UITableViewAutomaticDimension
textView.delegate = self
textView.text = "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum."
self.textViewDidChange(self.textView)
}

override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
}

override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}

override func tableView(_ tableView: UITableView, estimatedHeightForRowAt indexPath: IndexPath) -> CGFloat {
return 70
}
override func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
if indexPath.item == 1{//****Or index of your textView****
return textView.contentSize.height;
}
return 70

}

}

extension TableViewController: UITextViewDelegate {
func textViewDidChange(_ textView: UITextView) {
tableView.reloadData()
}
}

更新

class TableViewController: UITableViewController {

@IBOutlet weak var textView: UITextView!
override func viewDidLoad() {
super.viewDidLoad()
tableView.estimatedRowHeight = 70
tableView.rowHeight = UITableViewAutomaticDimension
textView.delegate = self
textView.text = "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum."
self.textViewDidChange(self.textView)
tableView.reloadData()

}

override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
}

override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}

override func tableView(_ tableView: UITableView, estimatedHeightForRowAt indexPath: IndexPath) -> CGFloat {
return 70
}
override func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
if indexPath.item == 0{//****Or index of your textView****
return textView.contentSize.height;
}
return 70

}

}

extension TableViewController: UITextViewDelegate {
func textViewDidChange(_ textView: UITextView) {

}

func textViewDidEndEditing(_ textView: UITextView) {
tableView.reloadData()
}
}

关于ios - TableView 中的动态 TextView 高度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41869887/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com