在动态单元格内键入UITextView且包围的Table View已向下滚动,以使当前正在编辑的UITextView / Cell在屏幕上不可见时,该表格视图会奇怪地滚动,即弹出或向下滚动屏幕,然后节标题以可视方式移入单元格区域。
我已经弄了几个月,还不能解决所有问题。我正在使用AutoLayout和UITableView.automaticDimensions来计算动态单元格高度。然后使用cellForRowAt中的beginUpdates()和endUpdates()动态设置动画并更新每个表视图单元格的大小。
还值得一提的是,我在每个单元格中都有一个不可滚动的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)
}
}