iOS 10.0中的UIRefreshControl不显示指示器

20

我正在使用一个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];
}

事先感谢您的帮助


你好。你怎么样?你找到解决方案了吗?谢谢你。问候。 - delarcomarta
启用UITableView的bounces属性。 - MAhipal Singh
8个回答

23

在代码之前:

[refreshControl beginRefresh]

插入代码:

[refreshControl layoutIfNeeded]


这解决了我的问题。感谢您的帮助。 - dogwasstar
3
这对我在iOS 11上没有起作用。其他答案也是如此:( - heyfrank
我最终推迟了beginRefreshing()的调用,并在viewWillAppear中设置了0.01秒的内容偏移量。仍然有一些小问题,但“还好”... @vivektakrani - heyfrank

4
在viewDidLoad中延迟调用刷新对我有帮助:
    dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.1 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
        [self.refreshControl beginRefreshing];
});

2

和@jpros的回答一样,只是用Swift语言实现

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

1

既然他们没有在GM中修复它,是否有可能出现了变化,我们需要采取不同的做法? - skinsfan00atg
10.1 beta已经发布了,有人测试了吗? - skinsfan00atg

1

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

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

1
在给一个回答或帖子点踩时,请解释一下原因。否则这样做就毫无意义。 - Thorax
2
在初始化我的 tableView 之后,这对我起作用了。例如,在 viewWillAppear 上调用 self.view.layoutIfNeeded。我正在使用 Swift。 - pableiros
1
这对我有用!谢谢!!我确实需要将它放在viewWillAppear中,而不是viewDidLoad。 - skinsfan00atg

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

0

我只能通过从viewDidLoad()中调用来修复这个问题:

refreshControl.layoutIfNeeded()

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接