UIRefreshControl не показывает колючий при вызове beginRefreshing и contentOffset равен 0

Я не могу видеть загрузчик загрузки при вызове beginRefreshing

[self.refreshControl beginRefreshing];

В моем подклассе UITableViewController используется UIRefreshControl

// refresh
    UIRefreshControl * refreshControl = [UIRefreshControl new];
    [refreshControl addTarget:self action:@selector(refreshTableView) forControlEvents:UIControlEventValueChanged];
    self.refreshControl = refreshControl;

Он отлично работает с пользовательским взаимодействием (когда пользователь опускает таблицу вниз), тогда отображается счетчик.

Но когда я вызываю beginRefreshing в viewDidLoad, я не вижу счетчик (только когда я перетаскиваю таблицу вниз).

Примечания:

  • ссылка self.refreshControl права

  • reloadData или endRefreshing не вызывается сразу после beginRefreshing, но есть длительная временная задержка (загрузка данных через сеть), поэтому я не отменяю beginRefreshing.

Изменить: Это происходит только тогда, когда свойство contentOffset для tableView равно 0 и я вызываю [self.refreshControl beginRefreshing]. Ошибка? Feauture?

Ответ 1

Мне кажется, что это ошибка, потому что это происходит только тогда, когда свойство contentOffset tableView равно 0

Я исправил это с помощью следующего кода (метод для UITableViewController):

- (void)beginRefreshingTableView {

    [self.refreshControl beginRefreshing];

    if (self.tableView.contentOffset.y == 0) {

        [UIView animateWithDuration:0.25 delay:0 options:UIViewAnimationOptionBeginFromCurrentState animations:^(void){

            self.tableView.contentOffset = CGPointMake(0, -self.refreshControl.frame.size.height);

        } completion:^(BOOL finished){

        }];

    }
}

Ответ 2

Ваше исправление выглядит хорошо, но я не считаю это ошибкой.

Когда метод beginRefreshing вызывается вручную,

Когда нет доступной строки/ячейки, имеет смысл для автоматического управления обновлением. Но когда есть несколько доступных ячеек, и когда мы вызываем начало обновления вручную (сценарий, в котором мы периодически обновляемся по таймеру), то он не должен анимировать/изменять смещение содержимого, поскольку он будет отвлекать пользователя, если он видит/читает содержимое в некоторые видимые клетки.