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
avant le code:
[refreshControl beginRefresh]
insérez le code:
[refreshControl layoutIfNeeded]
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];
...
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];
});
Identique à @jpros mais dans Swift
if #available(iOS 10.0, *) {
tableView.refreshControl = refreshControl
} else {
tableView.addSubview(refreshControl)
}
refreshControl.layoutIfNeeded()
refreshControl.beginRefreshing()
Il s'agit d'un bogue connu et signalé dans iOS 10.
Je ne suis pas sûr s'il existe des solutions de contournement.
Je n'ai pu résoudre ce problème qu'en appelant de viewDidLoad ():
refreshControl.layoutIfNeeded()
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];