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