This question already has an answer here:
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?
It looks like a bug to me, because it only occures when the
contentOffset
property of thetableView
is0
I fixed that with the following code (method for the UITableViewController) :
Your fix looks good, But I don't think this as a bug.
When beginRefreshing method is called manually,
When there is no row / cell available it makes sense for refresh control appearing automatically. But when there are some cells available, and when we call begin refresh manually (A scenario where we refresh periodically based on timer) then It should not animate / change the content offset as it will distract the user if he is seeing / reading content in some visible cell.