Как сфокусировать последнюю ячейку в UITableview в IOS - PullRequest
0 голосов
/ 27 апреля 2018

Я создаю интерфейс чата.

Сообщение пользователя помещается в новую ячейку представления UITable.

А при обновлении табличного представления я использую следующий код.

extension UITableView {

    func scrollToBottom() {
        let rows = self.numberOfRows(inSection: 0)

        if rows > 0 {
            let indexPath = IndexPath(row: rows - 1, section: 0)
            self.scrollToRow(at: indexPath, at: .bottom, animated: true)
        }
    }
}

На самом деле это работает немного лучше, но есть что-то странное.

Когда я выключаю приложение и снова включаю его, или после выхода из экрана и повторного входа возникают следующие проблемы.

Проблема заключается в том, что когда я добавляю новую ячейку, она поднимается до первой ячейки в табличном представлении и обратно до последней ячейки.

см. Выпуск (https://vimeo.com/266821436)

По мере увеличения количества ячеек прокрутка становится слишком быстрой и слишком грязной.

Я просто хочу обновить последнюю зарегистрированную ячейку.

Что мне делать?

Ответы [ 3 ]

0 голосов
/ 27 апреля 2018

попробуйте код ниже в viewDidAppear() или viewWillAppear () и используйте ваш код как есть.

обновлен

func scrollToBottom(_ animated: Bool) {
      let y: CGFloat = self.tblchat.contentSize.height
      self.tblchat.setContentOffset(CGPoint(x: 0, y: y), animated: animated)
   }
0 голосов
/ 27 апреля 2018

Пожалуйста, используйте DispatchQueue для прокрутки, потому что метод, который вы запускаете, выполняется с данными загрузки tableView, поэтому нам нужно дать время для прокрутки.

extension UITableView {

    func scrollToBottom() {
        let rows = self.numberOfRows(inSection: 0)

        if rows > 0 {
            DispatchQueue.main.async {
                let indexPath = IndexPath(row: rows - 1, section: 0)
                self.scrollToRow(at: indexPath, at: .bottom, animated: true)
            }
        }
    }
}

или

func scrollToBottom(){
    DispatchQueue.main.async {
        let indexPath = IndexPath(row: self.array.count-1, section: 0)
        self.tableView.scrollToRow(at: indexPath, at: .bottom, animated: true)
    }
}
0 голосов
/ 27 апреля 2018

self.scrollToRow (at: indexPath.last ...)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...