如何以编程方式向下滑动UITableView以显示底层的UIRefreshControl

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何以编程方式向下滑动UITableView以显示底层的UIRefreshControl相关的知识,希望对你有一定的参考价值。

当我以编程方式更新表时,如何显示UIRefreshControl?使用[self.refreshControl beginRefreshing]使微调器具有动画效果,但不会显示它。

答案

您必须自己手动更改contentOffsetUITableView。一定要考虑contentInset.top。它应该是一件简单的事情:

CGPoint newOffset = CGPointMake(0, -[myTableView contentInset].top);
[myTableView setContentOffset:newOffset animated:YES];
另一答案

这样就可以了

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

        }];

    }
}
另一答案

对于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)
        }
    }
}
另一答案

对于Swift 5,这是我唯一的工作版本。

extension UIRefreshControl {

    func beginRefreshingManually() {
        if let scrollView = superview as? UIScrollView {
            scrollView.setContentOffset(CGPoint(x: 0, y: scrollView.contentOffset.y - frame.height), animated: false)
        }
        beginRefreshing()
        sendActions(for: .valueChanged)
    }

}

以上是关于如何以编程方式向下滑动UITableView以显示底层的UIRefreshControl的主要内容,如果未能解决你的问题,请参考以下文章

UITableView 以编程方式调用滑动操作

以编程方式编辑 UITableView 在所有行上显示删除按钮

如何以编程方式声明和显示我的 UITableView? [关闭]

如何以编程方式在 UITableView 中添加视图?

如何制作可滑动的 UItableview 标题以显示像单元格一样的删除按钮

以编程方式打开 UITableView 编辑操作按钮