UIRefreshControl:table 视图奇怪地跳转
UIRefreshControl: table view jumps weirdly
我在 table 视图中有一个 UIRefreshControl
,我的问题是当我下拉 table 视图时,在某一点上,刷新控件不是动画的,但它会突然从一种尺寸跳到另一种尺寸。
我在一个简单的示例中重新创建了行为,这是我的视图控制器中的所有代码:
class ViewController: UIViewController {
let refreshControl = UIRefreshControl()
@IBOutlet weak var tableView: UITableView!
override func viewDidLoad() {
super.viewDidLoad()
tableView.delegate = self
tableView.dataSource = self
refreshControl.backgroundColor = .blue
tableView.refreshControl = refreshControl
tableView.insertSubview(refreshControl, at: 0)
}
}
extension ViewController: UITableViewDelegate, UITableViewDataSource {
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return 20
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "testCell", for: indexPath)
cell.textLabel?.text = "\(indexPath.row)"
return cell
}
func scrollViewDidEndDecelerating(_ scrollView: UIScrollView) {
refreshControl.endRefreshing()
}
}
在下面的视频中,您可以看到尺寸变化动画流畅,除了它开始跳跃的某个点:
您可以在 swift 中执行此操作,例如:
var refreshControl = UIRefreshControl()
override func viewDidLoad() {
super.viewDidLoad()
tableView.delegate = self
tableView.dataSource = self
refreshControl.attributedTitle = NSAttributedString(string: "Pull to refresh")
refreshControl.addTarget(self, action: #selector(self.refresh(_:)), for: .valueChanged)
tableView.addSubview(refreshControl) // not required when using UITableViewController
}
@objc func refresh(_ sender: AnyObject) {
// Code to refresh table view
refreshControl.endRefreshing() // End Refreshing
}
您不能在 scrollViewDidEndDecelerating
方法中使用 endRefreshing() 并像上面那样更新您的 viewDidLoad()
。
我在 table 视图中有一个 UIRefreshControl
,我的问题是当我下拉 table 视图时,在某一点上,刷新控件不是动画的,但它会突然从一种尺寸跳到另一种尺寸。
我在一个简单的示例中重新创建了行为,这是我的视图控制器中的所有代码:
class ViewController: UIViewController {
let refreshControl = UIRefreshControl()
@IBOutlet weak var tableView: UITableView!
override func viewDidLoad() {
super.viewDidLoad()
tableView.delegate = self
tableView.dataSource = self
refreshControl.backgroundColor = .blue
tableView.refreshControl = refreshControl
tableView.insertSubview(refreshControl, at: 0)
}
}
extension ViewController: UITableViewDelegate, UITableViewDataSource {
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return 20
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "testCell", for: indexPath)
cell.textLabel?.text = "\(indexPath.row)"
return cell
}
func scrollViewDidEndDecelerating(_ scrollView: UIScrollView) {
refreshControl.endRefreshing()
}
}
在下面的视频中,您可以看到尺寸变化动画流畅,除了它开始跳跃的某个点:
您可以在 swift 中执行此操作,例如:
var refreshControl = UIRefreshControl()
override func viewDidLoad() {
super.viewDidLoad()
tableView.delegate = self
tableView.dataSource = self
refreshControl.attributedTitle = NSAttributedString(string: "Pull to refresh")
refreshControl.addTarget(self, action: #selector(self.refresh(_:)), for: .valueChanged)
tableView.addSubview(refreshControl) // not required when using UITableViewController
}
@objc func refresh(_ sender: AnyObject) {
// Code to refresh table view
refreshControl.endRefreshing() // End Refreshing
}
您不能在 scrollViewDidEndDecelerating
方法中使用 endRefreshing() 并像上面那样更新您的 viewDidLoad()
。