2017-10-15 72 views
1

我遇到了一个奇怪的问题,当UIRefreshControlUITableView和自定义UITableViewCells结合使用时出现问题。如果我使用基本的(在Xcode的检查器面板中设置),它工作得很好。请参阅GIFs on ImgurUIRefreshControl与自定义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获得刷新控件的正确行为?

+0

请在您的文章和外部网站上添加图片 – slashburn

+0

@slashburn我的声望并不高。 –

+0

对不起,我的坏:) – slashburn

回答

0

这就是我如何在自定义单元格的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',这会使问题返回。 –