iOS 10.0 UIRefreshControl 不显示指示器
Posted
技术标签:
【中文标题】iOS 10.0 UIRefreshControl 不显示指示器【英文标题】:iOS 10.0 UIRefreshControl not showing indicator 【发布时间】:2016-09-14 11:26:15 【问题描述】:我正在使用具有下拉刷新功能的 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];
提前感谢您的帮助
【问题讨论】:
嗨。你好吗?你找到解决方案了吗?谢谢。问候。 启用 UITableView 弹跳属性 【参考方案1】:代码前:
[refreshControl beginRefresh]
插入代码:
[refreshControl layoutIfNeeded]
【讨论】:
这为我解决了这个问题。感谢您的帮助。 这对我来说不适用于 iOS 11。其他答案也没有:( 我最终延迟了beginRefreshing()
调用并将内容偏移设置为viewWillAppear
内的0.01 秒。仍然有一些小故障,但它“没关系”......@vivektakrani【参考方案2】:
在 viewDidLoad 中延迟刷新调用对我有用:
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.1 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^
[self.refreshControl beginRefreshing];
);
【讨论】:
【参考方案3】:与@jpros 的答案相同,但速度很快
if #available(iOS 10.0, *)
tableView.refreshControl = refreshControl
else
tableView.addSubview(refreshControl)
refreshControl.layoutIfNeeded()
refreshControl.beginRefreshing()
【讨论】:
【参考方案4】:这是 iOS 10 中已知和报告的错误。
Radar rdar://27468436
我不确定是否有任何解决方法。
【讨论】:
看到他们没有在 GM 中修复它,是否有可能,有变化并且我们需要做一些不同的事情? 10.1 测试版发布,有人检查吗?【参考方案5】:您需要致电 [self.view layoutIfNeeded]
以在 iOS 10 中修复它。就我而言,致电 viewDidLoad
就足够了(我在该项目中使用故事板)。对于其他情况,viewWillAppear
更适合。
- (void)viewDidLoad
[super viewDidLoad];
[self.view layoutIfNeeded];
...
【讨论】:
投反对票时请解释原因。否则没有意义 这在初始化我的 tableView 后对我有用。例如,在viewWillAppear
上调用self.view.layoutIfNeeded
。我正在使用 swift。
这对我有用!谢谢你!!我确实必须把它放在 viewwillappear 中,而不是 viewdidload 中。【参考方案6】:
我只能通过调用 viewDidLoad() 来解决这个问题:
refreshControl.layoutIfNeeded()
【讨论】:
【参考方案7】:在 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];
【讨论】:
【参考方案8】:如果您的刷新指示器未显示,请尝试在 Interface Builder 中为表格视图或滚动视图启用 Bounce Vertically。
【讨论】:
以上是关于iOS 10.0 UIRefreshControl 不显示指示器的主要内容,如果未能解决你的问题,请参考以下文章
iOS 13 UISearchController + UIRefreshControl 故障
iOS UIRefreshControl-刷新tableView