Ios6 当调用beginRefreshing和contentOffset为0时,UIRefreshControl不显示spiny
调用Ios6 当调用beginRefreshing和contentOffset为0时,UIRefreshControl不显示spiny,ios6,uitableview,uirefreshcontrol,Ios6,Uitableview,Uirefreshcontrol,调用beginRefreshing时,我无法看到加载微调器 [self.refreshControl beginRefreshing]; 我的UITableViewController子类使用UIRefreshControl // refresh UIRefreshControl * refreshControl = [UIRefreshControl new]; [refreshControl addTarget:self action:@selector(refreshTa
beginRefreshing
时,我无法看到加载微调器
[self.refreshControl beginRefreshing];
我的UITableViewController子类使用UIRefreshControl
// refresh
UIRefreshControl * refreshControl = [UIRefreshControl new];
[refreshControl addTarget:self action:@selector(refreshTableView) forControlEvents:UIControlEventValueChanged];
self.refreshControl = refreshControl;
它可以完美地与用户交互(当用户放下桌子时),然后微调器可见
但是,当我在viewDidLoad上调用beginRefreshing
时,我看不到微调器(仅当我向下拖动表格时)
注:
- self.refreshControl引用是正确的
- 在beginRefreshing之后不会立即调用reloadData或endRefreshing,但是有很长的时间延迟(通过网络加载数据),因此我不会取消beginRefreshing
只有当
tableView
的contentOffset
属性为0并且我调用[self.refreshControl beginRefreshing]
时,才会发生这种情况。缺陷Feauture?我觉得它像个bug,因为它只在tableView
的contentOffset
属性为0
时发生
我使用以下代码(UITableViewController的方法)修复了该问题:
你的修复看起来不错,但我不认为这是一个错误 手动调用beginRefreshing方法时 当没有行/单元格可用时,自动显示刷新控件是有意义的。
但是当有一些单元格可用时,当我们手动调用begin refresh(我们根据计时器定期刷新的场景)时,它不应该设置/更改内容偏移量,因为如果用户在某个可见单元格中看到/读取内容,它会分散用户的注意力 当我将节数和行数设置为0时,我尝试调用
-beginRefreshing
。它仍然不显示刷新控件。如果我没记错的话,它曾经在iOS 6上工作。所以它可能是一个bug.swift4:self.uiRefresh?.beginRefreshing()UIView.animate(持续时间:0.25,延迟:0,选项:uiviewmanimationoptions.beginFromCurrentState,动画:{self.tableView.contentOffset=CGPoint(x:0,y:-(self.uiRefresh?.frame.size.height??0)),完成:零)
这很有效。谢谢你的发帖。奇怪的是,我在我的一些UITableView上看到了这个问题,而不是其他的…如果你的tableview在导航栏下,偏移量将不是0
,而是-self.topLayoutGuide.length
。经过一整天的努力,你的解决方案终于奏效了重复的问题在哪里?
- (void)beginRefreshingTableView {
[self.refreshControl beginRefreshing];
if (self.tableView.contentOffset.y == 0) {
[UIView animateWithDuration:0.25 delay:0 options:UIViewAnimationOptionBeginFromCurrentState animations:^(void){
self.tableView.contentOffset = CGPointMake(0, -self.refreshControl.frame.size.height);
} completion:^(BOOL finished){
}];
}
}