Почему UITableView setContentOffset не работает должным образом, когда reloadRows был вызван раньше? - PullRequest
0 голосов
/ 05 февраля 2020

Кажется, что tableView.setContentOffset(, animated: ) не работает должным образом, когда tableView.reloadRows(at: , with: ) был вызван ранее.

Если был вызван reloadRows setContentOffset, то он перемещает TableView вверх и вниз на несколько пикселей, но не прокручивает до правильная позиция. Только при повторном вызове setContentOffset прокрутка выполняется правильно.

Это известная проблема, ошибка или я что-то не так делаю?


Код

Проблема может быть воспроизведена с помощью простого UIViewController, который содержит только UINavigationBar с двумя UIBarButtonItems и UITableView.

Кнопки BarButton используются для запуска reloadRows и setContentOffset. TableView Содержит простой список из 10 стандартных UITableViewCell с текстом немного. Это отлично работает

Нажмите правую кнопку бара, чтобы вызвать reloadRows. Первая строка будет перезагружена (не видно) Нажмите левую кнопку бара, чтобы снова вызвать setContentOffset. TableView будет только слегка двигаться вместо правильной прокрутки Нажмите левую кнопку бара, чтобы снова вызвать setContentOffset. Теперь прокрутка снова будет работать.

Есть идеи, как предотвратить это странное поведение?

Ответы [ 2 ]

0 голосов
/ 05 февраля 2020

Просто замените свой код для leftBarButtonAction на ниже. Надеюсь, что это работает. :)

tableView.reloadData()
tableView.layoutIfNeeded()
tableView.setContentOffset(CGPoint(x: 0, y: self.tableView.contentOffset.y + 100), animated: true)
0 голосов
/ 05 февраля 2020
    @IBAction func leftBarButtonAction(_ sender: Any) {
        // Scroll up 100px
       tableView.beginUpdates()
       tableView.setContentOffset(CGPoint(x: 0, y: self.tableView.contentOffset.y + 100), animated: true)
       tableView.endUpdates()
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...