Ios6 如何以编程方式向下滑动UITableView以显示底层UIRefresh控件

Ios6 如何以编程方式向下滑动UITableView以显示底层UIRefresh控件,ios6,uitableview,uirefreshcontrol,Ios6,Uitableview,Uirefreshcontrol,以编程方式更新表时,如何显示UIRefreshControl? 使用[self.refreshControl beginRefreshing]使微调器具有动画效果,但不会显示它。您必须自己手动更改UITableView的内容偏移量。请务必说明内容inset.top。它应该简单到: CGPoint newOffset = CGPointMake(0, -[myTableView contentInset].top); [myTableView setContentOffset:newOffset

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

您必须自己手动更改
UITableView的
内容偏移量。请务必说明
内容inset.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){

        }];

    }
}
-(void)beginRefreshingTableView{
[自我刷新控制开始刷新];
//检查contentOffset是否为零
if(fabsf(self.tableView.contentOffset.y)
对于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)
        }
    }
}
override func viewDidLoad(){
super.viewDidLoad()
self.refreshControl?.addTarget(self,操作:#选择器(刷新),forControlEvents:UIControlEvents.ValueChanged)
// ...
}
func刷新(发送方:AnyObject){
self.refreshControl?.beginRefreshing()
如果让yOffsetTable=self.tableView?.contentOffset.y{
如果yoffsetable
对于Swift 5,这是我唯一可以使用的版本

扩展控件{
func beginRefreshingManually(){
如果让scrollView=superview为?UIScrollView{
setContentOffset(CGPoint(x:0,y:scrollView.contentOffset.y-frame.height),动画:false)
}
beginRefreshing()
sendActions(针对:.valueChanged)
}
}

我注意到,如果调用
endRefreshing
[myTableView setContentOffset:CGPointZero animated:YES]后不重置contentOffset,则这可能会导致单元格绘制出现问题
要在iOS 8或iOS 9中修复此问题,只需从
视图调用
[self.refreshControl beginRefreshing]
将显示:
方法,而不是从
viewDidLoad:
。任何其他人在使用beginRefresh()触发刷新时存在纺车颜色错误的问题吗?在我的例子中,黑色背景是黑色的,但是当用拉触发刷新时,它是白色的。设置色调颜色没有帮助。@AlexanderPerechnev它在ios 9的viewDidLoad中对我有效,但现在在ios 10中甚至不起作用viewWillAppear@sofacoder是的,我也有同样的问题。当从视图调用beginRefreshing时,着色颜色为黑色。将显示:,并且我所做的任何操作都不会改变这一点。从那时起更改tintColor起作用,但在第一次显示时不起作用。显然,您需要在tableview动画的完成块内或在动画调用之后调用
beginRefreshing
,否则将忽略您设置的refreshControl的tintColor。