为什么UIRefreshControl跳跃?

我尝试用swift 1.2来使用UIRefreshControl,除了用户界面以外,还能正常工作。 这是跳,我不知道为什么。 这是我在做什么:

class ViewController: UIViewController { var refreshControl:UIRefreshControl! @IBOutlet weak var tableView: UITableView! override func viewDidLoad() { super.viewDidLoad() self.refreshControl = UIRefreshControl() self.refreshControl.attributedTitle = NSAttributedString(string: "Pull to refresh") self.refreshControl.addTarget(self, action: "refresh:", forControlEvents: UIControlEvents.ValueChanged) self.tableView.addSubview(refreshControl) } func refresh(sender:AnyObject) { // Code to refresh table view } } 

你可以从这里下载我的POC项目 : POC项目

当你拉下tableView时,突然跳了一下。 有没有人知道为什么?

如果我使用UITableViewController,它工作正常,但我不想使用此UI对象。 我想在UIViewController中使用一个简单的UITableView。

我find了解决scheme,它的工作原理:

 override func viewDidLoad() { super.viewDidLoad() self.refreshControl = UIRefreshControl() self.refreshControl.attributedTitle = NSAttributedString(string: "Pull to refresh") self.refreshControl.addTarget(self, action: "refresh:", forControlEvents: UIControlEvents.ValueChanged) var tableViewC = UITableViewController() tableViewC.refreshControl = self.refreshControl self.tableView = tableViewC.tableView self.view.addSubview(self.tableView) } 

对于Xamarin.iOS它看起来像这样:

 [Register ("MyViewController")] partial class MyViewController { [Outlet] public UITableView myTableView { get; set; } // ... } public partial class MyViewController : UIViewController { public UIRefreshControl myRefreshControl { get; set; } public override void ViewDidLoad() { base.ViewDidLoad(); // ... this.myRefreshControl = new UIRefreshControl(); this.myRefreshControl.AttributedTitle = new NSAttributedString("Load News from server..."); this.myRefreshControl.AddTarget(this, new ObjCRuntime.Selector("RefreshSource"), UIControlEvent.ValueChanged); #region Fix the Jump problem UITableViewController tableViewController = new UITableViewController(); tableViewController.TableView = this.myTableView; tableViewController.RefreshControl = this.myRefreshControl; #endregion #region Fix the unwanted first showing this.myRefreshControl.BeginRefreshing(); this.myRefreshControl.EndRefreshing(); #endregion // ... } [Export("RefreshSource")] private async void RefreshSource() { #region Edit source data await Task.Run(() => { Thread.Sleep(3000); }); #endregion this.myTableView.ReloadData(); this.myRefreshControl.EndRefreshing(); } } 

我遇到过这个问题,我相信这是因为UIRefreshControl是为了UITableViewController。

我认为你应该尝试在下面的索引0插入视图。 (打扰目标-c)

[self.tableView insertSubview:_refreshControl atIndex:0];

编辑

你有代码来停止refreshControl?

  // End Refreshing if ([self.refreshControl isRefreshing]) { float delayInSeconds = 1.0; dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, (int64_t)(delayInSeconds * NSEC_PER_SEC)); dispatch_after(popTime, dispatch_get_main_queue(), ^{ [self.refreshControl endRefreshing]; }); } 

尝试这一个将工作良好

 var tableViewController = UITableViewController(style: UITableViewStyle.Plain) tableViewController.tableView = self.myTableView self.refreshControl = UIRefreshControl() self.refreshControl.addTarget(self, action: #selector(self.getConnections),forControlEvents: .ValueChanged) tableViewController.refreshControl = self.refreshControl