使用refreshControl的多个UITableViewBug

时间:2016-09-29 17:10:17

标签: ios

我已经构建了一个非常简单的演示应用程序来说明我在使用安装了tableView的UIViewController时发现的两个错误。如果我使用标准的UITableviewController,则不会出现这些问题。

Video to demonstrate the bug

project link to github

  1. 基本上,当我慢慢刷新时,我会向下跳跃(大约30点)。我还需要在复习器激活之前拖动一点点(屏幕的一半左右)。如果我快速拉,问题就不存在了。

  2. 如果我同时实现了hideNavigationBarOnSwipe和refreshControl,则节标题因为所有丑陋且不合适(在视频中稍后显示)。

  3. 我想知道,对于这种类型的错误,如果我想拍摄看看Apple是否改进了它,我应该给它一个以下三个选项中的哪一个。 (这个项目建立在xcode7.3,swift 2,IOS9.0

    1. 从swift 2更新到swift 3。
    2. 将Xcode从7更新为8
    3. 为更高的IOS版本构建应用
    4. ----完整代码----

      import UIKit
      
      class ViewController: UIViewController, UITableViewDelegate, UITableViewDataSource {
      
          @IBOutlet weak var myTableView: UITableView!
      
          var refreshControl: UIRefreshControl!
      
          override func viewDidLoad() {
              super.viewDidLoad()
              myTableView.delegate = self
              myTableView.dataSource = self
      
              navigationController!.hidesBarsOnSwipe = true
      
              refreshControl = UIRefreshControl()
              refreshControl.addTarget(self, action: #selector(ViewController.refresh), forControlEvents: .ValueChanged)
              myTableView.addSubview(refreshControl)
          }
      
          func refresh() {
      
          }
      
          @IBAction func stopRefreshingBtnPressed(sender: AnyObject) {
              refreshControl.endRefreshing()
          }
      
          func numberOfSectionsInTableView(tableView: UITableView) -> Int {
              return 10
          }
      
          func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
              return 10
          }
      
          func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
              let cell = tableView.dequeueReusableCellWithIdentifier("myCell", forIndexPath: indexPath)
              cell.textLabel?.text = "section \(indexPath.section) row \(indexPath.row)"
              return cell
          }
      
          func tableView(tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat {
              return 20
          }
      
          func tableView(tableView: UITableView, titleForHeaderInSection section: Int) -> String? {
              return "Section Header \(section)"
          }
      }
      

1 个答案:

答案 0 :(得分:2)

 override func viewDidLoad() {
    super.viewDidLoad()
    myTableView.delegate = self
    myTableView.dataSource = self
    navigationController!.hidesBarsOnSwipe = true

    refreshControl = UIRefreshControl()

    //Create an instance of a UITableViewController. This will host your UITableView.
     let tableController = UITableViewController()

    //Add tableController as a childViewController and set its tableView property to your UITableView.
    self.addChildViewController(tableController)
    tableController.tableView = myTableView
    tableController.refreshControl = self.refreshControl
}