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.
中已知和已报告的错误
我不确定是否有任何解决方法。
您需要调用 [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 视图或滚动视图启用垂直弹跳。
我正在使用具有下拉刷新功能的 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.
中已知和已报告的错误我不确定是否有任何解决方法。
您需要调用 [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 视图或滚动视图启用垂直弹跳。