75 votes

iOS 7 UIRefreshControl tintColor ne fonctionne pas pour beginRefreshing

Je suis en train de définir une nuance de couleur sur mon UIRefreshControl (sur iOS 7). J'ai activé rafraîchissant pour le tableViewController dans le storyboard, puis dans mon ViewController viewDidLoad méthode je n'ai suivantes:

[self.refreshControl setTintColor:[UIColor redColor]];

Alors maintenant, quand je tire de l'actualisation, la couleur de l'actualisation de contrôle est rouge en effet:

redSpiny

Je veux mon avis, de mettre à jour automatiquement lorsqu'il apparaît, alors, j'ai fait:

- (void)viewDidAppear:(BOOL)animated{
    [self.refreshControl beginRefreshing];
}

Il n'a pas montré le rouet, selon http://stackoverflow.com/a/16250679/1809736, j'ai ajouté

[self.tableView setContentOffset:CGPointMake(0, -self.refreshControl.frame.size.height) animated:NO];

à force de le montrer. Il montre, mais maintenant il est de retour à la couleur par défaut:

enter image description here

Si j'essaie manuellement pour tirer à actualiser par la suite, il est rouge.

J'ai essayé de la construire sur iOS6 et il fonctionne comme il se doit, donc, est-ce un iOS7 bug?

P. S.: ce n'est pas un problème avec le simulateur, j'ai essayé de la construire sur l'appareil, même bug.

P. P. S: j'ai construit un exemple de projet, pouvez-vous me dire si vous avez le même bug ou si il y a un problème dans mon code? Voici le lien: http://d.pr/f/pGrV

Merci beaucoup !

54voto

William George Points 1659

Hey viens de tomber sur cette question exacte.

Fait intéressant, j'ai corrigé mon code en définissant d'abord le contentOffset, puis en appelant beginRefreshing

 if(self.tableView.contentOffset.y == 0){
    self.tableView.contentOffset = CGPointMake(0, -self.refreshControl.frame.size.height);
    [self.refreshControl beginRefreshing];
}
 

Vous voudrez peut-être animer ce processus:

 [UIView animateWithDuration:0.25 delay:0 options:UIViewAnimationOptionBeginFromCurrentState animations:^(void){
    self.tableView.contentOffset = CGPointMake(0, -self.refreshControl.frame.size.height);
} completion:^(BOOL finished) {
    [self.refreshControl beginRefreshing];
}];
 

J'espère que cela vous aide.

W

8voto

jpsim Points 1234

La réponse de @ william-george m'a mis dans la bonne direction, mais me donnait d'étranges problèmes d'animation avec autolayout.

Alors voici la version qui a fonctionné pour moi:

 - (void)programaticallyRefresh {
    // Hack necessary to keep UIRefreshControl's tintColor
    [self.scrollView setContentOffset:CGPointMake(0, -1.0f) animated:NO];
    [self.scrollView setContentOffset:CGPointMake(0, -self.refreshControl.frame.size.height) animated:YES];
    [self.refreshControl beginRefreshing];
    [self refresh];
}
 

-refresh est la méthode liée à UIRefreshControl .

3voto

artworkad シ Points 15473

Solution au problème de tintColor: ajoutez ceci dans viewDidLoad

 [self.refreshControl setTintColor:[UIColor whiteColor]];
[self.refreshControl tintColorDidChange];
 

Vous avez maintenant un indicateur blanc lorsque vous appelez beginRefresh manuellement.

0voto

MacMark Points 1663

Essayez de définir la teinteCouleur de votre UIRefreshControl dans viewWillAppear.

-2voto

TreeTree Points 294

Forcez setTintColor à s'exécuter dans le thread principal. (Le fil principal met à jour l'interface utilisateur).

 [[NSOperationQueue mainQueue] addOperationWithBlock:^ {
    [self.refreshControl setTintColor:[UIColor redColor]];
    [self.refreshControl beginRefreshing];
}];
 

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X