iOS 10.0 UIRefreshControl未显示指示符

时间:2016-09-14 11:26:16

标签: ios uitableview ios10 uirefreshcontrol ios9.3.2

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

时,下拉刷新的微调器没有显示出来

在viewDidLoad中调用上面的代码导致表最初加载一些数据。如果我在初始刷新后执行下拉刷新,则微调器工作正常。标题显示但不是旋转器。

似乎无法解决这个问题。它适用于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];
}

感谢您的提前帮助

8 个答案:

答案 0 :(得分:22)

代码前的

[refreshControl beginRefresh]

插入代码:

[refreshControl layoutIfNeeded]

答案 1 :(得分:3)

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

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

答案 2 :(得分:2)

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

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

答案 3 :(得分:1)

这是iOS 10中已知且已报告的错误。

Radar rdar://27468436

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

答案 4 :(得分:1)

与@jpros相同,但在swift中

Observable<Example>

答案 5 :(得分:0)

我只能通过从viewDidLoad()调用来解决这个问题:

refreshControl.layoutIfNeeded()

答案 6 :(得分:0)

在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];

答案 7 :(得分:0)

如果刷新指示器未显示,请尝试在Interface Builder中为表视图或滚动视图启用“垂直反弹”。