23

プログラムでテーブルを更新するときに UIRefreshControl を表示するにはどうすればよいですか? [self.refreshControl beginRefreshing] を使用すると、スピナーがアニメーション化されますが、表示されません。

4

4 に答える 4

20

自分で手動で変更する必要がcontentOffsetありますUITableView。を考慮してくださいcontentInset.top。次のように単純なものにする必要があります。

CGPoint newOffset = CGPointMake(0, -[myTableView contentInset].top);
[myTableView setContentOffset:newOffset animated:YES];
于 2012-12-31T23:48:32.160 に答える
18

これはトリックを行います

- (void)beginRefreshingTableView {

    [self.refreshControl beginRefreshing];

    // check if contentOffset is zero
    if (fabsf(self.tableView.contentOffset.y) < FLT_EPSILON) {

        [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-27T10:08:30.987 に答える
9

Swift 3の場合、これはPeter Lapisuの答えに基づいて私が持っているものです:

override func viewDidLoad() {
    super.viewDidLoad()
    self.refreshControl?.addTarget(self, action: #selector(refresh), forControlEvents: UIControlEvents.ValueChanged)
    // ...
}

func refresh(sender:AnyObject) {
    self.refreshControl?.beginRefreshing()

    if let yOffsetTable = self.tableView?.contentOffset.y {
        if yOffsetTable < CGFloat(Float.ulpOfOne) {
            UIView.animate(withDuration: 0.25, delay: 0, options: UIViewAnimationOptions.beginFromCurrentState, animations: {
                if let refreshControlHeight = self.refreshControl?.frame.height {
                    self.tableView?.contentOffset = CGPoint(x: 0, y: -refreshControlHeight)
                }
            }, completion: nil)
        }
    }
}
于 2016-02-15T00:52:39.833 に答える