Как сделать UITableView прокруткой вниз [Автопрокрутка]? - PullRequest
0 голосов
/ 10 мая 2019

Я трачу много времени, чтобы выяснить эту ошибку.вначале прокрутка выглядит хорошо, но время от времени прокрутка увеличивается автоматически, что делает ее нечитаемой для человека.как прокручивать так же, как в начале.

    var  start_index = 0
    var  dest_index  = 0  //approximately 300  
    var  timer       = Timer()
    var  falagisTrue : Bool?

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

        dest_index = newsViewModels.count
        timer = Timer.scheduledTimer(timeInterval: 0.1, target: self, selector: #selector(self.keepScrolling), userInfo: nil, repeats: true)

    }



    @objc func keepScrolling(){
        if start_index > dest_index - 2{
            timer.invalidate()
        }else{
            if  (falagisTrue ?? false ||  falagisTrue == nil)  {
                falagisTrue = false
                start_index += 1

                UIView.animate(withDuration: 10, delay: 0, options: [], animations: {
                    let Index = IndexPath(row: self.start_index, section: 0)
                    self.tableView.scrollToRow(at:Index, at: .top, animated: false)
                }) { finished in
                    self.falagisTrue = true
                }
            }
        }
    }

Не могли бы вы помочь мне исправить эту ошибку или предложить альтернативное решение для автоматической прокрутки?

1 Ответ

1 голос
/ 10 мая 2019

Я пробую твой код, и он у меня работает правильно.Но:

  1. Вы можете добавить параметр анимации .curveLiner (анимация будет происходить равномерно по всей продолжительности).Возможно, это была ваша ошибка:

    UIView.animate(withDuration: 10, delay: 0, options: [.curveLinear], animations: {
        let Index = IndexPath(row: self.start_index, section: 0)
        self.tableView.scrollToRow(at:Index, at: .top, animated: false)
    }) { finished in
        self.falagisTrue = true
    }
    
  2. Вы должны сделать недействительным таймер, когда представление исчезает (иначе представление создает дополнительный таймер каждый раз, когда работают старые таймеры):

    override func viewWillDisappear(_ animated: Bool) {
        timer.invalidate()
    }
    
...