Я думаю, что это происходит, потому что в начале вы используете setContentOffset , чтобы оставить пробел, но этот пробел не удаляется.
Я предложу другую реализацию, которая работает очень хорошо:
Сначала вы объявляете refreshControll перед методом viewDidLoad () :
let refreshControl = UIRefreshControl()
Теперь вам нужно создать метод для остановки анимации при необходимости:
func stopAnimatingRefreshControl() {
if let refreshControl =
tableView.subviews.first(where: { $0 is UIRefreshControl})as? UIRefreshControl,
refreshControl.isRefreshing {
refreshControl.endRefreshing()
}
}
Теперь вы создаете функцию @ obj c, которая вызывается при прокрутке таблицы для обновления, обычно в этот момент вы вызываете методы, которые заставляют ваш сервер запросить обновление данных.
Когда эти данные обновляются, вы вызываете функцию stopAnimatingRefreshControl ():
@objc func refreshMyData() {
// call methods for get data from server
getDataFromServer()
}
func getDataFromServer() {
// request completed and data is updated, now i need stop the loading.
DispatchQueue.main.async {
self.tableView.reloadData()
}
stopAnimatingRefreshControl()
}
Наконец, после создания необходимых методов вам необходимо связать нашу @ obj c функцию до refreshControll и наш tableView , сделайте это методом viewDidLoad () :
refreshControl.addTarget(self, action: #selector(refreshMyData), for: .valueChanged)
tableView.addSubview(refreshControl)
Теперь все готово, я надеюсь, я помог.