Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

iOS 10.0 UIRefreshControl not showing indicator

I am using a UITableView Which has a Pull down to refresh function but the spinner for pull down to refresh is not showing up when I call the [self.refreshControl beginRefreshing]

The above code is called inside the viewDidLoad cause the table is loading some data initially. The spinner works fine if I perform a pull down to refresh after the initial refresh. The title shows up but not the spinner.

Cant seem to solve this problem. It works fine on iOS 9.3.2 but not on iOS 10.

Here is the code I am using currently.

- (void)viewDidLoad
{
    [super viewDidLoad];
    [self setupView];
    [self customSetup];
    self.refreshControl = [[UIRefreshControl alloc] init];
    self.refreshControl.attributedTitle = [[NSAttributedString alloc] initWithString:@"Updating Discounts..."];
    [self.refreshControl addTarget:self action:@selector(reloadDeals) forControlEvents:UIControlEventValueChanged];
    [self.refreshControl beginRefreshing];
    [self.tableView setContentOffset:CGPointMake(0, -self.refreshControl.frame.size.height) animated:YES];
}

Thanks for your help in advance

like image 796
dogwasstar Avatar asked Sep 14 '16 11:09

dogwasstar


5 Answers

before the code:

[refreshControl beginRefresh]

insert the code:

[refreshControl layoutIfNeeded]

like image 75
weirdyu Avatar answered Oct 07 '22 20:10

weirdyu


Delaying call to refresh in viewDidLoad worked for me:

    dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.1 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
        [self.refreshControl beginRefreshing];
});
like image 25
user6869501 Avatar answered Oct 07 '22 19:10

user6869501


Same as @jpros answer but in swift

if #available(iOS 10.0, *) {
    tableView.refreshControl = refreshControl
} else {
    tableView.addSubview(refreshControl)
}
refreshControl.layoutIfNeeded()
refreshControl.beginRefreshing()
like image 32
givip Avatar answered Oct 07 '22 20:10

givip


This is a known and reported bug in iOS 10.

Radar rdar://27468436

I'm not sure if there are any workarounds.

like image 31
Dejan Skledar Avatar answered Oct 07 '22 20:10

Dejan Skledar


You need to call [self.view layoutIfNeeded] to fix it in iOS 10. For my case it was enough to put the call to viewDidLoad (I was using storyboard in that project). For other cases viewWillAppear fits better.

- (void)viewDidLoad
  {
   [super viewDidLoad];
   [self.view layoutIfNeeded];
   ...
like image 37
Thorax Avatar answered Oct 07 '22 19:10

Thorax