2016-09-14 65 views
16

我使用其中有一个UITableView下拉刷新功能,但对于微调下拉刷新没有显示出来,当我打电话[self.refreshControl beginRefreshing]iOS的10.0 UIRefreshControl没有显示指标

以上代码在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]; 
} 

感谢您的帮助提前

+0

嗨。你好吗?你找到解决方案吗?谢谢。问候。 – delarcomarta

+0

启用UITableView弹跳属性 – Rivendell

回答

21

代码之前:

[refreshControl beginRefresh]

插入代码:

[refreshControl layoutIfNeeded]

+0

这已经解决了我的问题。谢谢你的帮助。 – dogwasstar

1

这是iOS的10已知和报告的bug

Radar rdar://27468436

我不知道是否有任何变通办法。

+0

真棒感谢您的快速回复 – dogwasstar

+0

看到他们没有解决它在通用汽车,是否有可能,有变化,我们需要做不同的事情? – skinsfan00atg

+0

10.1测试版,任何人都没有检查? – skinsfan00atg

3

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

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

当downvoting时,请解释原因。否则它是毫无意义的 – Thorax

+2

这对我初始化我的tableView后适用。例如,在'viewWillAppear'上调用'self.view.layoutIfNeeded'。我正在使用swift。 – pableiros

+1

这为我工作!谢谢!!我不得不把它放在viewwillappear中,而不是viewdidload。 – skinsfan00atg

2

延迟呼叫viewDidLoad中刷新为我工作:

dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.1 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ 
     [self.refreshControl beginRefreshing]; 
}); 
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]; 
1

同@jpros回答,但在迅疾

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