2013-04-20 7 views
11

io non sono in grado di vedere il filatore di carico al momento della chiamata beginRefreshingnon UIRefreshControl mostrando spinosa quando si chiama beginRefreshing e contentOffset? 0

[self.refreshControl beginRefreshing]; 

mio UITableViewController sottoclasse utilizza un UIRefreshControl

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

E ' funziona perfettamente con l'interazione dell'utente (quando l'utente rilascia la tabella verso il basso), quindi lo spinner è visibile.

Ma quando chiamo beginRefreshing su viewDidLoad, non vedo lo spinner (solo quando trascino il tavolo verso il basso).

Note:

  • riferimento self.refreshControl si trova proprio

  • reloadData o endRefreshing non viene chiamato immediatamente dopo beginRefreshing, ma c'è un ritardo molto tempo (il caricamento dei dati attraverso la rete), così ho non sto cancellando il beginRefreshing.

Edit: Questo accade solo quando la proprietà del tableViewcontentOffset è 0 e chiamo [self.refreshControl beginRefreshing]. Bug? Feauture?

+0

Dove si trova la domanda duplicata? – shontauro

risposta

27

Sembra un bug per me, perché occures solo quando la proprietà del tableViewcontentOffset è 0

ho fissato che con il seguente codice (metodo per l'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){ 

     }]; 

    } 
} 
+0

Questo funziona. Grazie per la pubblicazione. – SayeedHussain

+1

Stranamente, ottengo questo problema su alcuni dei miei UITableViews e non gli altri ... – David

+1

Se il tuo tableview è sotto una barra di navigazione, il 'offset' non sarà' 0' ma '-self.topLayoutGuide.length'. –

3

La tua correzione sembra buona, ma non penso che sia un bug.

Quando il metodo viene chiamato beginRefreshing manualmente,

Quando non v'è alcuna riga/cella disponibile ha senso per il controllo di refresh visualizzazione automatica. Ma quando ci sono alcune celle disponibili, e quando chiamiamo avviare l'aggiornamento manualmente (uno scenario in cui aggiorniamo periodicamente in base al timer), non dovrebbe animare/modificare l'offset del contenuto in quanto potrebbe distrarre l'utente se sta visualizzando/leggendo il contenuto in alcune celle visibili.

+4

Ho provato a chiamare '-beginRefreshing' quando ho impostato il numero di sezioni e righe su 0. Non mostra ancora il controllo di aggiornamento. Se ricordassi correttamente, funzionava su iOS 6. Quindi potrebbe essere un bug. – Hlung