2013-04-20 10 views
11

nie jestem w stanie zobaczyć tarczy ładowania podczas wywoływania beginRefreshingnie UIRefreshControl pokazując kolczasty Dzwoniąc beginRefreshing i contentOffset jest 0

[self.refreshControl beginRefreshing]; 

Moja UITableViewController podklasa używa UIRefreshControl

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

Jest działa idealnie z interakcją z użytkownikiem (kiedy użytkownik upuszcza stolik w dół), wtedy spinner jest widoczny.

Ale gdy zadzwonię pod numer beginRefreshing na viewDidLoad, nie widzę pokrętła (tylko wtedy, gdy przeciągam tabelę w dół).

Uwagi:

  • odniesienia self.refreshControl jest tuż

  • reloadData lub endRefreshing nie jest wywoływana natychmiast po beginRefreshing, ale występuje opóźnienie dawno (ładowanie danych poprzez sieć), więc nie anuluję beginRefreshing.

Edit: Dzieje się tak tylko wtedy, gdy właściwość tableViewcontentOffset jest 0 i wzywam [self.refreshControl beginRefreshing]. Pluskwa? Feauture?

+0

Gdzie jest powielone pytanie? – shontauro

Odpowiedz

27

Wygląda na to bug do mnie, ponieważ tylko occures gdy własność tableViewcontentOffset jest 0

Naprawiłem to z następującego kodu (sposobu 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

To działa. Dzięki za publikację. – SayeedHussain

+1

Co dziwne, pojawia się ten problem w niektórych moich widokach UITableView, a nie w innych ... – David

+1

Jeśli widok tabeli znajduje się pod paskiem nawigacyjnym, "offset" nie będzie mieć wartości "0", ale "-self.topLayoutGuide.length". –

3

Twoja poprawka wygląda dobrze, ale nie uważam tego za błąd.

Kiedy beginRefreshing metodę nazywa się ręcznie,

Gdy nie ma wiersz/komórka dostępna jest sens kontroli odświeżania pojawiający się automatycznie. Ale gdy jest dostępnych kilka komórek i kiedy wywołujemy odświeżanie ręczne (scenariusz, w którym odświeżamy okresowo w oparciu o zegar), to nie powinno ono animować/zmieniać przesunięcia treści, ponieważ odwróci uwagę użytkownika, jeśli widzi/czyta treść w jakiejś widocznej komórce.

+4

Próbowałem wywoływać '-beginRefreshing', gdy ustawiłem liczbę sekcji i wierszy na 0. Nadal nie widać kontrolki odświeżania. Jeśli dobrze pamiętałem, to działało na iOS 6. Może to być błąd. – Hlung

Powiązane problemy