添加NavigationController后导航栏不显示

时间:2016-02-28 23:55:30

标签: ios swift

我已将UITableViewController嵌入NavigationController中。但是,当我显示视图时,导航栏不会显示。

展示TableViewController(其故事板ID为:SelectServicesController):

if let selectServicesController = self.storyboard?.instantiateViewControllerWithIdentifier("SelectServicesController") as? UITableViewController {
    self.navigationController?.presentViewController(selectServicesController, animated: true, completion: nil)
}

enter image description here

这是我构建时的样子(导航栏未显示):

enter image description here

10 个答案:

答案 0 :(得分:4)

所以我只是做了这个并且在拳头上根本无法让它显示出来。然后想出来,你只需要选择导航控制器并将其设置为✅is initial View Controller

这就是你的故事板应该是什么样子 NavigationController setup

然后为了让所有内容都显示出来,我将其添加到导航控制器所呈现的视图viewDidLoad中。这一步更具可选性。

    self.navigationController?.navigationBar.barTintColor = UIColor.redColor()
    self.navigationController?.navigationBar.tintColor = UIColor.blackColor()
    self.navigationController?.navigationBar.titleTextAttributes = [NSForegroundColorAttributeName:UIColor.blackColor()]
    navigationController?.navigationBar.hidden = false

这就是它的样子

NavContorllerInAction

毫米红色黑色希望能帮到你。

答案 1 :(得分:3)

您正在展示一个UITableViewController,它没有导航控制器作为父级(即使您的Storyboard首先使用它,您实际上并没有使用它)。

您可以通过执行以下操作来解决此问题:

if let selectServicesController = self.storyboard?.instantiateViewControllerWithIdentifier("SelectServicesController") as? UITableViewController {
    let navigationController = UINavigationController(rootViewController: selectServicesController)
    self.navigationController?.presentViewController(navigationController, animated: true, completion: nil)
}

或者将导航控制器设置为故事板的初始视图控制器,然后像这样调用它:

if let selectServicesController = self.storyboard?.instantiateInitialViewController() {
    self.navigationController?.presentViewController(selectServicesController, animated: true, completion: nil)
}

答案 2 :(得分:1)

我遇到了同样的问题。我通过将segue更改为嵌入我想要显示的视图控制器的导航控制器来解决它。 enter image description here

希望它适合你。 如果这是一个不好的做法,请告诉我。

答案 3 :(得分:1)

添加这个对我有用:

self.navigationController?.isNavigationBarHidden = false

答案 4 :(得分:0)

您直接呈现表视图控制器,而不是其导航控制器。如果将导航控制器标记为初始视图控制器(勾选属性检查器中的“是初始视图控制器”框),则可以通过以下方式实例化并显示它:

if let selectServicesNavController = self.storyboard?.instantiateInitialViewController() as? UINavigationController {
    // if you're pushing it onto an existing nav controller
    self.navigationController?.presentViewController(selectServicesNavController, animated: true, completion: nil)

    // if not (and this is probably the case), set the nav controller as your window's rootViewController
    UIApplication.sharedApplication().keyWindow.rootViewController = selectServicesNavController
}

答案 5 :(得分:0)

我的猜测是Xcode忽略了这样一个事实,即在使用以下代码呈现表视图控制器时,您的表视图控制器嵌入在导航控制器中:

if let selectServicesController = self.storyboard?.instantiateViewControllerWithIdentifier("SelectServicesController") as? UITableViewController {
    self.navigationController?.presentViewController(selectServicesController, animated: true, completion: nil)
}

相反,我建议您修改模拟指标下的顶栏设置以满足您的需要或改为实例化导航控制器(后者是首选和推荐的)

答案 6 :(得分:0)

在您的代码中,更改此行

self.navigationController?.presentViewController(selectServicesController, animated: true, completion: nil)

到这个

self.presentViewController(selectServicesController, animated: true, completion: nil)

答案 7 :(得分:0)

我在你的一条评论中读到了你想以模态方式呈现表视图控制器,并显示导航栏。我们可以使用Storyboard来做到这一点。从应该以模态方式显示此表视图控制器的视图控制器,Ctrl +从视图控制器拖动到表视图控制器的导航控制器。然后,选择以模态呈现。为segue设置标识符。然后,在以模态方式呈现表视图控制器的视图控制器的代码中,调用:

d /run/cntlm   700 cntlm cntlm

在不使用任何代码的情况下执行此操作的另一种方法是,模式演示是由按钮之类的东西触发的。然后,您可以从该按钮按Ctrl +拖动到导航控制器,然后选择“模态显示”。

答案 8 :(得分:0)

或者可能是这个!!

我遇到了同样的问题:导航栏显示在Storyboard的根视图中,但是在运行模拟器时 - 视图顶部没有导航栏。这解决了它:

导航控制器>导航栏> UNCHECK半透明(默认选中)。这做了两件事:

  1. 我的导航栏会显示所有后续视图。
  2. 最顶层的子视图现在是Y = 0,而不是Y = 64。
  3. enter image description here

答案 9 :(得分:0)

let storyboard = UIStoryboard(name: "Expense", bundle: Bundle(for: PTCAddExpenseViewController.self))


let controller =  storyboard.instantiateViewController(withIdentifier:"AddExpense") as! PTCAddExpenseViewController



let navigationController = UINavigationController(rootViewController: controller)

self.present(navigationController, animated: true, completion: nil)