iOS 10.0 UIRefreshControl 不显示指示器

iOS 10.0 UIRefreshControl not showing indicator

我正在使用具有下拉刷新功能的 UITableView,但是当我调用 [self.refreshControl beginRefreshing]

时,用于下拉刷新的微调器没有显示

上面的代码在 viewDidLoad 内部调用,因为 table 最初正在加载一些数据。如果我在初始刷新后执行下拉刷新,微调器工作正常。显示标题但不显示微调器。

似乎无法解决这个问题。它在 iOS 9.3.2 上运行良好,但在 iOS 10.

上运行良好

这是我目前使用的代码。

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

提前感谢您的帮助

这是 iOS 10.

中已知和已报告的错误

Radar rdar://27468436

我不确定是否有任何解决方法。

您需要调用 [self.view layoutIfNeeded] 来修复它 iOS 10。对于我的情况,调用 viewDidLoad 就足够了(我在那个项目中使用了故事板) .对于其他情况,viewWillAppear 更合适。

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

在 viewDidLoad 中延迟调用刷新对我有用:

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

我只能通过调用 viewDidLoad():

来解决这个问题
refreshControl.layoutIfNeeded()

在iOS10中,我们应该使用 UITableView 或 UICollectionView 的 setRefreshControl 添加 UIRefreshControl。

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

与@jpros 的回答相同,但在 swift

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

代码前:

[refreshControl beginRefresh]

插入代码:

[refreshControl layoutIfNeeded]

如果您的刷新指示器未显示,请尝试在 Interface Builder 中为 table 视图或滚动视图启用垂直弹跳。