UIRefreshControl在以编程方式触发时不刷新

Chr*_*cue 3 ios uirefreshcontrol swift

我试图在视图加载时显示一个刷新控件,以显示我从Parse获取数据.应用程序运行时,刷新控件可以正常工作,但我无法从应用程序的任何位置以编程方式启动它.这是似乎没有运行的代码:

 override func viewDidAppear(animated: Bool) {
    self.refresher.beginRefreshing()
 }
Run Code Online (Sandbox Code Playgroud)

这不仅不会运行,而且应用程序中的代码会更改刷新控件的属性.当我在应用程序中有这个代码,并显示用户交互的复习时,刷新控件没有它通常所做的属性标题,也没有运行它应该的代码.

cro*_*row 5

我需要在setContentOffset和self.refreshControl?.sendActions(for: .valueChanged)调用之间添加一个延迟.没有延迟,refreshControl的attributesTitle将无法呈现.

这适用于iOS 10(Swift 3):

self.tableView.setContentOffset(CGPoint(x:0, y:self.tableView.contentOffset.y - (self.refreshControl!.frame.size.height)), animated: true)

DispatchQueue.main.asyncAfter(deadline: DispatchTime.now() + 0.2, execute: {
  self.refreshControl?.sendActions(for: .valueChanged)
})
Run Code Online (Sandbox Code Playgroud)


hen*_*que 5

这是在10.3上运行的扩展:

extension UIRefreshControl {
    func refreshManually() {
        if let scrollView = superview as? UIScrollView {
            scrollView.setContentOffset(CGPoint(x: 0, y: scrollView.contentOffset.y - frame.height), animated: false)
        }
        beginRefreshing()
        sendActions(for: .valueChanged)
    }
}
Run Code Online (Sandbox Code Playgroud)

  • sendAction(for:) 导致递归调用,从而产生意外行为,从而使方法递归调用自身。除此之外,该扩展效果很好。 (2认同)