hidesBarsOnSwipe会意外显示工具栏

时间:2015-11-23 02:47:53

标签: ios swift uitoolbar

我在两个视图控制器中设置了hidesBarsOnSwipe=true,没有工具栏的Foo视图控制器推动了具有工具栏的Bar视图控制器。当Bar弹出回Foo时,工具栏将在我滚动Foo视图控制器时显示。如果我没有在条形视图控制器中设置self.navigationController?.toolbarHidden = false,则工具栏将不会显示在Bar和Foo视图控制器中。我使用iOS8 SDK + Xcode 7.1.1 + Swift 2.1。

class FooTableViewController : UITableViewController
{
override func viewDidLoad() {
    super.viewDidLoad()

    self.navigationController?.hidesBarsOnSwipe = false
    self.navigationController?.toolbarHidden = true
}

override func viewWillAppear(animated: Bool) {
    super.viewWillAppear(animated)

    self.navigationController?.toolbarHidden = true
}

override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    return 20
}

override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
    let cell = UITableViewCell()
    cell.textLabel?.text = "12345678"

    return cell
} }

class BarTableViewController : UITableViewController
{
override func viewDidLoad() {
    super.viewDidLoad()

    self.navigationController?.hidesBarsOnSwipe = true
    self.navigationController?.toolbarHidden = false
}

override func viewWillDisappear(animated: Bool) {
    super.viewWillDisappear(animated)

    self.navigationController?.hidesBottomBarWhenPushed = false
    self.navigationController?.toolbarHidden = true
}

override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    return 20
}

override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
    let cell = UITableViewCell()
    cell.textLabel?.text = "12345678"

    return cell
}}

Bar Foo

1 个答案:

答案 0 :(得分:0)

你遇到了两个问题:

  1. 您无法向UITableViewController
  2. 添加任何内容
  3. 所有程序化toolbarHiddenhidesBarsOnSwipe只会让操作系统感到困惑,您最终会在错误的图层上显示工具栏,与表格视图一起滚动,以及与导航栏类似的奇怪之处。
  4. 您希望第二个表视图由UIViewController处理,而不是UITableViewController。几乎没有程序化更改,您只需要UIViewController采用数据源和表委托协议。

    无需修改显示/隐藏工具栏。代码更简单,您可以在故事板中定义下面未列出的所有内容。

    Foo (没有工具栏):

    class FooTableViewController: UITableViewController {
        override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
            return 20
        }
    
        override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
            let cell = UITableViewCell()
            cell.textLabel?.text = "Foo \(indexPath.row)"
    
            return cell
        }
    
        override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
            self.performSegueWithIdentifier("Bar", sender: self)
        }
    }
    

    (带工具栏):

    class BarTableViewController: UIViewController, UITableViewDataSource, UITableViewDelegate {
        func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
            return 20
        }
    
        func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
            let cell = UITableViewCell()
            cell.textLabel?.text = "Bar \(indexPath.row)"
    
            return cell
        }
    }
    

    最终产品:

    Foo & Bar

    ►在GitHub上找到此解决方案,并在Swift Recipes上找到其他详细信息。