2017-10-15 33 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',這會使問題返回。 –