Swift 3 - 为啥我的导航栏没有显示?

Posted

技术标签:

【中文标题】Swift 3 - 为啥我的导航栏没有显示?【英文标题】:Swift 3 - Why is my Navigation Bar not showing?Swift 3 - 为什么我的导航栏没有显示? 【发布时间】:2017-07-31 05:04:30 【问题描述】:

我有一个简单的应用程序来测试休息 api 的推送通知。我想在应用程序中显示导航栏,但它不起作用。在我的 AppDelegate 中,我有以下代码:

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool 
    self.registerForPushNotifications()
    let url = "dev"
    UserDefaults.standard.setValue(FFHelper.url(slug: url.slug()), forKey: "api-url")
    var vcString = "loginView"
    if KeychainSwift().get("auth-token") != nil 
        vcString = "notificationsTable"
    
    let initialVC = UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: vcString)
    initialVC.navigationController?.navigationBar.isHidden = false
    initialVC.navigationController?.setNavigationBarHidden(false, animated: true)
    window?.rootViewController = initialVC
    window?.makeKeyAndVisible()
    return true

在情节提要中也启用了导航栏: 最后,在 viewController 中,我做同样的事情:

override func viewWillAppear(_ animated: Bool) 
    self.navigationController?.setNavigationBarHidden(false, animated: animated)
    self.navigationController?.navigationBar.isHidden = false
    super.viewWillAppear(animated)

但在启动应用程序后,导航栏仍然没有显示: 谁能告诉我这是为什么?

【问题讨论】:

这个故事板标识符 ** var vcString = "loginView" ** 是为 navigationController 还是为 ViewController 设置的? 我是多么愚蠢...谢谢你的提示。这已经足以指出我的愚蠢了...... :) ***.com/a/35460043/6550949 有这个问题的最佳答案 【参考方案1】:

您正在显示 vcString 是您的 LoginVC

您需要使用 NavigationController 标识符,例如 loginView

你需要在显示前嵌入NavigationControler

let initialVC = UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: vcString)

    let navi =  UINavigationController.init(rootViewController: initialVC)

  window?.rootViewController = navi

【讨论】:

以上是关于Swift 3 - 为啥我的导航栏没有显示?的主要内容,如果未能解决你的问题,请参考以下文章

Swift:强制在模态中显示导航栏

导航栏按钮项目的图像 swift

为啥我的 UITextView 文本从开始时不显示并隐藏在导航栏下

在 Swift 3.0 中实现滑动以在没有导航栏的情况下向后导航

如何使用 Xcode 和 Swift 在我的导航栏中添加标题?

为啥我的 Ajax 响应显示在我的导航栏上?