表格视图动态单元格内的文本视图产生奇怪的滚动行为

时间:2019-06-22 03:28:33

标签: ios swift textview uikit tableview

在动态单元格内键入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)
        }
    }

0 个答案:

没有答案