我已经看到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的一个已知错误;有时刷新控件被错误地放置在 View 层次结构的前面,而不是后面。您可以通过在布局后将其发送回去来解决部分问题:

- (void)viewDidLayoutSubviews
{
    [super viewDidLayoutSubviews];

    [self.refreshControl.superview sendSubviewToBack:self.refreshControl];
}

动画仍将是不完美的,但至少它仍将位于表格 View 下方。请为此问题打开bug report with Apple

另外,如另一个答案所述,您不应自己将刷新控件添加到 View 层次结构中。表格 View Controller 将为您完成此任务。但这不是这里的问题。

Swift版本
override func viewDidLayoutSubviews() {
    super.viewDidLayoutSubviews()
    refreshControl?.superview?.sendSubview(toBack: refreshControl!)
}

关于ios - UIRefreshControl在UITableViewController中的位置错误,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21337534/

10-09 08:03