UIRefreshControl在应用程序不活动后停止旋转

我在UITableView中使用UIRefreshControl:

UIRefreshControl *refreshControl = [[UIRefreshControl alloc] init]; [refreshControl addTarget:self action:@selector(refresh) forControlEvents:UIControlEventValueChanged]; self.refreshControl = refreshControl; 

用刷新处理程序:

 -(void)refresh { dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ // (...some long running operation...) dispatch_async(dispatch_get_main_queue(), ^{ [self.refreshControl endRefreshing]; }); }); } 

在长时间的运行过程中,我使应用程序处于非活动状态,按下主页button 之后,我再次使应用程序处于活动状态。 微调器冻结(停止旋转),无法将其返回到初始状态。

如何解决它?

我认为这是一个有点延迟的答案,但是,今天我看到类似的问题在iOS 7,IOS 6继续纺,

这里是一个小解决方法

 - (void)viewWillAppear:(BOOL)animated { [super viewWillAppear:animated]; if(self.refreshControl.isRefreshing) { CGPoint offset = self.tableView.contentOffset; [self.refreshControl endRefreshing]; [self.refreshControl beginRefreshing]; self.tableView.contentOffset = offset; } } 

它会停止并开始再次旋转,但它只发生在我身上的ios7,所以也许你应该检查不要在ios6

 - (void)viewWillAppear:(BOOL)animated { [super viewWillAppear:animated]; if(self.refreshControl.isRefreshing && [[[UIDevice currentDevice] systemVersion] floatValue] >= 7) { CGPoint offset = self.tableView.contentOffset; [self.refreshControl endRefreshing]; [self.refreshControl beginRefreshing]; self.tableView.contentOffset = offset; } } 

这是为我工作

Swift 3和Swift 4:

 override func viewWillAppear(_ animated: Bool) { super.viewWillAppear(animated) if self.refreshControl?.isRefreshing == true { let offset = self.tableView.contentOffset self.refreshControl?.endRefreshing() self.refreshControl?.beginRefreshing() self.tableView.contentOffset = offset } } 

Swift 2.3:

  override func viewWillAppear(animated: Bool) { super.viewWillAppear(animated) if self.refreshControl?.refreshing == true { let offset = self.tableView.contentOffset self.refreshControl?.endRefreshing() self.refreshControl?.beginRefreshing() self.tableView.contentOffset = offset } }