UIRefreshControl与自定义TableViewCell结合发生故障
问题描述:
我遇到了一个奇怪的问题,当UIRefreshControl
与UITableView
和自定义UITableViewCells
结合使用时出现问题。如果我使用基本的(在Xcode的检查器面板中设置),它工作得很好。请参阅GIFs on Imgur。UIRefreshControl与自定义TableViewCell结合发生故障
override func viewDidLoad() {
super.viewDidLoad()
navigationController?.navigationBar.prefersLargeTitles = true
refreshControl = UIRefreshControl()
refreshControl?.addTarget(self, action: #selector(self.refresh), for: .valueChanged)
tableView.refreshControl = refreshControl
refresh()
}
@objc func refresh() {
tableView.reloadData()
refreshControl?.endRefreshing()
}
override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return 8
}
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "cell")
return cell!
}
UITableView和UITableViewCell在检查器中的设置是默认设置。我在多个项目中遇到这个问题。上面的代码在一个干净的项目中。当prefersLargeTitles = false
时,刷新控制也跳转。
如何使用自定义TableViewCell获得刷新控件的正确行为?
答
这就是我如何在自定义单元格的UITableView中添加刷新控件。
lazy var refreshControl: UIRefreshControl = {
let refreshControl = UIRefreshControl()
refreshControl.addTarget(self, action: #selector(self.refresh(_:)), for: UIControlEvents.valueChanged)
return refreshControl
}()
func refresh(_ refreshControl: UIRefreshControl) {
self.tableView.reloadData()
}
override func viewDidLoad() {
super.viewDidLoad()
self.tableView.addSubview(refreshControl)
}
可能在完成任务时添加endRefreshing,而不是在refreshControl本身的操作中添加endRefreshing。
+0
这确实解决了这个问题,但它不适用于大标题。对于大型标题,你需要使用'tableView.refreshControl = refreshControl',这会使问题返回。 –
请在您的文章和外部网站上添加图片 – slashburn
@slashburn我的声望并不高。 –
对不起,我的坏:) – slashburn