我有一个UIViewController,里面有一个tableView。我添加了一个刷新控件。但是当我拉的时候,它总是跳跃一些时间,这是不平滑的和连续的。
我用的是Swift 4和Xcode 10.1。
class ItemsController: UIViewController, UITableViewDelegate, UITableViewDataSource, UITextViewDelegate, ItemCellDelegate {
......
lazy var refreshControl: UIRefreshControl = {
let refreshControl = UIRefreshControl()
refreshControl.addTarget(self, action:
#selector(handleRefresh(_:)),
for: UIControl.Event.valueChanged)
refreshControl.tintColor = UIColor.lightGray
return refreshControl
}()
......
override func viewDidLoad() {
// Refresh
self.tableView.refreshControl = self.refreshControl
}
......
@objc func handleRefresh(_ refreshControl: UIRefreshControl) {
loadData()
self.tableView.reloadData()
refreshControl.endRefreshing()
}
......
}
最佳答案
我也面临这样的问题。您可以使用以下方法:
更改handleRefresh方法,如下所示:
@objc func handleRefresh(_ refreshControl: UIRefreshControl) {
if !tableView.isDragging {
refresh() // refresh is another method for your reloading jobs
}
}
添加刷新方法。
func refresh() {
self.refreshControl.endRefreshing()
self.tableView.reloadData()
}
最后,您需要实现scrollViewDidendDraging。如果你拉得足够远,refreshControl将刷新,因此调用refresh。否则,您要么拖得不够远,要么拖到了表的另一部分,要么拖得太快,以至于refreshControl ValueChanged事件尚未触发,它将刷新那里的表。
func scrollViewDidEndDragging(_ scrollView: UIScrollView, willDecelerate decelerate: Bool) {
if refreshControl.isRefreshing == true {
refresh()
}
}
关于ios - Swift 4 Refresh Control不流畅但总是跳,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/55402810/