UIRefreshControl在UITableViewController中位置错误
我在UIRefreshControl上看到了很多问题,而且我的UITableViewController也遇到了问题。 问题发生得如此随机,从此我无法弄清楚为什么或如何发生。
问题是,有时当你向下滚动tableView时,UIRefreshControl出现在错误的位置,看起来像在tableView本身之上/之上。 我附上了问题的截图,我的代码也用于添加UIRefreshControl和它的刷新方法。
我感谢任何提供的帮助!
- (void)viewDidLoad { self.refreshControl = [[UIRefreshControl alloc] init]; [self.refreshControl addTarget:self action:@selector(refreshing:) forControlEvents:UIControlEventValueChanged]; [self.tableView addSubview:self.refreshControl]; self.tableView.tableFooterView = [[UIView alloc] init]; } - (void)refreshing:(UIRefreshControl*)refreshControl { [refreshControl beginRefreshing]; [UIApplication sharedApplication].networkActivityIndicatorVisible = YES; [refreshControl endRefreshing]; [UIApplication sharedApplication].networkActivityIndicatorVisible = NO; }
这是iOS7的已知错误; 有时刷新控件被错误地放在视图层次结构的前面而不是后面。 您可以通过在布局后将其发送回来解决部分问题:
- (void)viewDidLayoutSubviews { [super viewDidLayoutSubviews]; [self.refreshControl.superview sendSubviewToBack:self.refreshControl]; }
动画仍然不完美,但至少它仍然低于表格视图。 请针对此问题与Apple打开错误报告 。
另外,如另一个答案所述,您不应自己将刷新控件添加到视图层次结构中。 表视图控制器将为您执行此操作。 但这不是问题所在。
Swift版本
override func viewDidLayoutSubviews() { super.viewDidLayoutSubviews() refreshControl?.superview?.sendSubview(toBack: refreshControl!) }
我有同样的问题并修复它:
override func viewDidLoad() { let refreshControl = UIRefreshControl() refreshControl.addTarget(self, action: "refresh:", forControlEvents: .ValueChanged) tableView.backgroundView = refreshControl // <- THIS!!! }
而不是添加子视图将refreshControl指定为backgroundView