web-dev-qa-db-fra.com

iOS 10.0 UIRefreshControl n'indiquant pas l'indicateur

J'utilise un UITableView qui a un tirez pour actualiser la fonction mais le spinner pour tirer pour actualiser ne s'affiche pas quand j'appelle le [self.refreshControl beginRefreshing]

Le code ci-dessus est appelé dans viewDidLoad car la table charge certaines données initialement. La centrifugeuse fonctionne correctement si j'effectue une opération de rafraîchissement après l'actualisation initiale. Le titre apparaît mais pas le disque.

Cant ne semble pas résoudre ce problème. Cela fonctionne bien sur iOS 9.3.2 mais pas sur iOS 10.

Voici le code que j'utilise actuellement. 

- (void)viewDidLoad
{
    [super viewDidLoad];
    [self setupView];
    [self customSetup];
    self.refreshControl = [[UIRefreshControl alloc] init];
    self.refreshControl.attributedTitle = [[NSAttributedString alloc] initWithString:@"Updating Discounts..."];
    [self.refreshControl addTarget:self action:@selector(reloadDeals) forControlEvents:UIControlEventValueChanged];
    [self.refreshControl beginRefreshing];
    [self.tableView setContentOffset:CGPointMake(0, -self.refreshControl.frame.size.height) animated:YES];
}

Merci d'avance pour votre aide

16
dogwasstar

avant le code:

[refreshControl beginRefresh]

insérez le code:

[refreshControl layoutIfNeeded]

22
weirdyu

Vous devez appeler [self.view layoutIfNeeded] pour résoudre le problème sous iOS 10. Dans mon cas, il suffisait de mettre l'appel à viewDidLoad (j'utilisais le storyboard dans ce projet). Pour les autres cas, viewWillAppear convient mieux.

- (void)viewDidLoad
  {
   [super viewDidLoad];
   [self.view layoutIfNeeded];
   ...
2
Thorax

Le fait de retarder l'appel pour l'actualisation dans viewDidLoad a fonctionné pour moi:

    dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.1 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
        [self.refreshControl beginRefreshing];
});
2
user6869501

Identique à @jpros mais dans Swift

if #available(iOS 10.0, *) {
    tableView.refreshControl = refreshControl
} else {
    tableView.addSubview(refreshControl)
}
refreshControl.layoutIfNeeded()
refreshControl.beginRefreshing()
1
givip

Il s'agit d'un bogue connu et signalé dans iOS 10.

Radar rdar: // 27468436

Je ne suis pas sûr s'il existe des solutions de contournement.

1
Dejan Skledar

Je n'ai pu résoudre ce problème qu'en appelant de viewDidLoad ():

refreshControl.layoutIfNeeded()
0
AlexD

Dans iOS10, nous devrions ajouter UIRefreshControl à l'aide de setRefreshControl de UITableView ou UICollectionView.

if([self.tableView respondsToSelector:@selector(setRefreshControl:)]) {
    [self.tableView setRefreshControl:self.refreshControl];
}
else {
    [self.tableView addSubview:self.refreshControl];
}
[self.refreshControl layoutIfNeeded];
[self.refreshControl beginRefreshing];
0
jpros