ios uitableview ios10 uirefreshcontrol ios9.3.2

iOS 10.0 UIRefreshControl no muestra indicador



uitableview ios10 (8)

En iOS10, debemos agregar el UIRefreshControl usando setRefreshControl de UITableView o UICollectionView.

if([self.tableView respondsToSelector:@selector(setRefreshControl:)]) { [self.tableView setRefreshControl:self.refreshControl]; } else { [self.tableView addSubview:self.refreshControl]; } [self.refreshControl layoutIfNeeded]; [self.refreshControl beginRefreshing];

Estoy usando un UITableView que tiene una función Desplegable para actualizar, pero el control giratorio para desplegar para actualizar no aparece cuando llamo al [self.refreshControl beginRefreshing]

El código anterior se llama dentro de viewDidLoad porque la tabla está cargando algunos datos inicialmente. El spinner funciona bien si realizo un menú desplegable para actualizar después de la actualización inicial. El título aparece pero no el hilandero.

Parece que no puede resolver este problema. Funciona bien en iOS 9.3.2 pero no en iOS 10.

Aquí está el código que estoy usando actualmente.

- (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]; }

Gracias por su ayuda de antemano


Este es un error conocido y reportado en iOS 10.

Radar rdar: // 27468436

No estoy seguro de si hay alguna solución.


Igual que @jpros responde pero en veloz.

if #available(iOS 10.0, *) { tableView.refreshControl = refreshControl } else { tableView.addSubview(refreshControl) } refreshControl.layoutIfNeeded() refreshControl.beginRefreshing()


Retrasar la llamada para actualizar en viewDidLoad funcionó para mí:

dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.1 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ [self.refreshControl beginRefreshing]; });


Si su indicador de actualización no se muestra, intente habilitar Bounce Verticalmente en Interface Builder para la vista de tabla o de desplazamiento.


Solo pude arreglar esto llamando desde viewDidLoad ():

refreshControl.layoutIfNeeded()


antes del codigo :

[refreshControl beginRefresh]

inserte el código :

[refreshControl layoutIfNeeded]


[self.view layoutIfNeeded] llamar a [self.view layoutIfNeeded] para solucionarlo en iOS 10. En mi caso, fue suficiente para llamar a viewDidLoad (estaba usando el guión gráfico en ese proyecto). Para otros casos, viewWillAppear ajusta mejor.

- (void)viewDidLoad { [super viewDidLoad]; [self.view layoutIfNeeded]; ...