Search code examples
ios6uitableviewuirefreshcontrol

UIRefreshControl not showing spiny when calling beginRefreshing and contentOffset is 0


I am not able to see the loading spinner when calling beginRefreshing

[self.refreshControl beginRefreshing];

My UITableViewController subclass uses a UIRefreshControl

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

It is working perfectly with user interaction (when the user drops the table down), then the spinner is visible.

But when i call beginRefreshing on viewDidLoad, I don't see the spinner (only when i drag the table down).

Notes:

  • self.refreshControl reference is right

  • reloadData or endRefreshing is not called immediately after beginRefreshing, but there is a long time delay (loading data through network), so I am not canceling the beginRefreshing.

Edit : This only happens when the contentOffset property of the tableView is 0 and i call [self.refreshControl beginRefreshing]. Bug? Feauture?


Solution

  • It looks like a bug to me, because it only occures when the contentOffset property of the tableView is 0

    I fixed that with the following code (method for the 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){
    
            }];
    
        }
    }