11

调用时我看不到加载微调器beginRefreshing

[self.refreshControl beginRefreshing];

我的 UITableViewController 子类使用 UIRefreshControl

// refresh
    UIRefreshControl * refreshControl = [UIRefreshControl new];
    [refreshControl addTarget:self action:@selector(refreshTableView) forControlEvents:UIControlEventValueChanged];
    self.refreshControl = refreshControl;

它与用户交互(当用户放下桌子时)完美地工作,然后微调器可见。

但是当我调用beginRefreshingviewDidLoad 时,我看不到微调器(仅当我向下拖动表格时)。

笔记:

  • self.refreshControl 引用是对的

  • 在beginRefreshing之后没有立即调用reloadData或endRefreshing,但是有很长的延迟(通过网络加载数据),所以我没有取消beginRefreshing。

编辑: 这只发生在contentOffset属性tableView为 0 并且我调用时[self.refreshControl beginRefreshing]。漏洞?特征?

4

2 回答 2

29

对我来说它看起来像一个错误,因为它只发生在contentOffset属性tableView0

我用以下代码(UITableViewController 的方法)修复了这个问题:

- (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){

        }];

    }
}
于 2013-04-27T09:55:55.283 回答
3

你的修复看起来不错,但我不认为这是一个错误。

当手动调用 beginRefreshing 方法时,

当没有可用的行/单元格时,刷新控件自动出现是有意义的。但是当有一些可用的单元格时,并且当我们手动调用开始刷新(我们基于计时器定期刷新的场景)时,它不应该动画/更改内容偏移量,因为如果他正在查看/阅读内容,它会分散用户的注意力一些可见的细胞。

于 2013-04-29T09:47:31.637 回答