При наборе в UITextView внутри динамической ячейки И вмещающего табличного представления было прокручено вниз, так что редактируемый в настоящее время UITextView / Cell НЕ ВИДИМ на экране, табличное представление прокручивается странно, то есть всплывает или опускаетсяэкран, и заголовки разделов визуально перемещаются в области ячеек.
Я уже несколько месяцев с этим сталкивался и не смог решить все проблемы.Я использую AutoLayout и UITableView.automaticDimensions для вычисления динамической высоты ячейки.Затем с помощью beginUpdates () и endUpdates () в cellForRowAt для динамической анимации и обновления размера каждой ячейки табличного представления.
Стоит также упомянуть, что внутри КАЖДОЙ ячейки есть прокручиваемый UITextView.
Я пытался отключить прокрутку табличного представления;попытался сбросить позицию прокрутки табличного представления;и ничто не похоже на работу.UIKit кажется очень глючным.
override public func viewDidLoad() {
super.viewDidLoad()
localModel = TPClass.sharedInstance.theTomorrowPlanModel
//self.tableView.estimatedRowHeight = 512
self.tableView.rowHeight = UITableView.automaticDimension
//self.tableView.reloadData()
}
override public func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "MyTomorrowCell", for: indexPath) as! TextViewTableViewCell
// call back from cell
cell.textChanged {[weak tableView, weak self] newText in
TPClass.sharedInstance.theTomorrowPlanModel.dataArray[indexPath.section].text = newText
// update model
self?.localModel.dataArray[indexPath.section].text = newText
DispatchQueue.main.async {
print("This is run on the main queue")
self?.tableView.isScrollEnabled = false
self?.currentScrollPos = self?.tableView.contentOffset.y
tableView?.beginUpdates()
tableView?.endUpdates()
self?.tableView.isScrollEnabled = true
self?.currentScrollPos = nil
}
} // end call back
cell.textView.text = localModel.dataArray[indexPath.section].text
return cell
}
override func scrollViewDidScroll(_ scrollView: UIScrollView) {
// Force the tableView to stay at scroll position until animation completes
if (currentScrollPos != nil){
tableView.setContentOffset(CGPoint(x: 0, y: currentScrollPos!), animated: false)
}
}