ios6 uitableview uirefreshcontrol

ios6 - ¿Cómo puedo deslizar el UITableView por programación para revelar el UIRefreshControl subyacente?



(3)

¿Cómo puedo revelar el UIRefreshControl cuando actualizo la tabla mediante programación? El uso de [self.refreshControl beginRefreshing] hace que el spinner esté animado pero no lo revela.


Esto hará el truco

- (void)beginRefreshingTableView { [self.refreshControl beginRefreshing]; // check if contentOffset is zero if (fabsf(self.tableView.contentOffset.y) < FLT_EPSILON) { [UIView animateWithDuration:0.25 delay:0 options:UIViewAnimationOptionBeginFromCurrentState animations:^(void){ self.tableView.contentOffset = CGPointMake(0, -self.refreshControl.frame.size.height); } completion:^(BOOL finished){ }]; } }


Para Swift 3, esto es lo que he basado en la respuesta de Peter Lapisu:

override func viewDidLoad() { super.viewDidLoad() self.refreshControl?.addTarget(self, action: #selector(refresh), forControlEvents: UIControlEvents.ValueChanged) // ... } func refresh(sender:AnyObject) { self.refreshControl?.beginRefreshing() if let yOffsetTable = self.tableView?.contentOffset.y { if yOffsetTable < CGFloat(Float.ulpOfOne) { UIView.animate(withDuration: 0.25, delay: 0, options: UIViewAnimationOptions.beginFromCurrentState, animations: { if let refreshControlHeight = self.refreshControl?.frame.height { self.tableView?.contentOffset = CGPoint(x: 0, y: -refreshControlHeight) } }, completion: nil) } } }


Tendrá que cambiar manualmente el contentOffset de su UITableView usted mismo. Asegúrese de tener en cuenta el contentInset.top . Debe ser algo tan simple como:

CGPoint newOffset = CGPointMake(0, -[myTableView contentInset].top); [myTableView setContentOffset:newOffset animated:YES];