Текстовое представление внутри табличного представления Динамические ячейки производят странное поведение прокрутки - PullRequest
0 голосов
/ 22 июня 2019

При наборе в 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)
        }
    }
...