我在两个视图控制器中设置了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
}}
答案 0 :(得分:0)
你遇到了两个问题:
UITableViewController
toolbarHidden
和hidesBarsOnSwipe
只会让操作系统感到困惑,您最终会在错误的图层上显示工具栏,与表格视图一起滚动,以及与导航栏类似的奇怪之处。 您希望第二个表视图由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
}
}
最终产品:
►在GitHub上找到此解决方案,并在Swift Recipes上找到其他详细信息。