setNavigationBarHidden 不能以编程方式工作?

Posted

技术标签:

【中文标题】setNavigationBarHidden 不能以编程方式工作?【英文标题】:setNavigationBarHidden not working programmatically? 【发布时间】:2017-07-13 05:48:47 【问题描述】:

我正在尝试以编程方式创建不同的视图控制器,其中第一个不应该显示导航栏,但第二个应该。我似乎无法做任何事情来让第二个视图控制器显示导航栏。所有代码都编译得很好,推动控制器的按钮也能正常工作,因为第二个屏幕应该变绿了。

这是 AppDelegate:

class AppDelegate: UIResponder, UIApplicationDelegate 

var window: UIWindow?

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool 
    // Override point for customization after application launch.

    window = UIWindow(frame: UIScreen.main.bounds)
    window?.makeKeyAndVisible()

    let layout = UICollectionViewFlowLayout()
    let startupScreenController = StartupScreenController(collectionViewLayout: layout)
    window?.rootViewController = UINavigationController(rootViewController: startupScreenController)

    application.statusBarStyle = .lightContent

    return true

这是第一个视图控制器:

func skipButtonPressed() 

    let layout = UICollectionViewFlowLayout()
    let secondViewController = SecondViewController(collectionViewLayout: layout)
    self.navigationController?.pushViewController(secondViewController, animated: true)



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

    // Hide the navigation bar on this view controller
    self.navigationController?.setNavigationBarHidden(true, animated: animated)

这是第二个视图控制器:

class SecondViewController: UICollectionViewController 

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

    // Show the Navigation Bar on this view controller

    self.navigationController?.setNavigationBarHidden(false, animated: animated)
    UINavigationBar.appearance().barTintColor = UIColor(red: 24/255, green: 24/255, blue: 24/255, alpha: 1  )


override func viewDidLoad() 
    super.viewDidLoad()

    collectionView?.backgroundColor = UIColor.green


【问题讨论】:

【参考方案1】:

对于我的项目,它只有在我将它添加到 viewWillLayoutSubviews() 时才有效。

override func viewWillLayoutSubviews() 
    super.viewWillLayoutSubviews()

    self.navigationController?.navigationBar.isHidden = true

【讨论】:

【参考方案2】:

按以下方式隐藏navigation bar。设置false 启用返回

override func viewDidLoad()   
    super.viewDidLoad()
    self.navigationController?.navigationBar.isHidden = true

【讨论】:

【参考方案3】:

你必须像下面那样做。

func viewDidLoad() 
    super.viewDidLoad()
    self.navigationController?.setNavigationBarHidden(false, animated: animated)

【讨论】:

别忘了加电话super.viewDidLoad() 不客气..... :) 您应该按照 *** 指南接受正确答案,以便其他人可以在遇到相同问题时获得帮助! @unicorn_surprise 这不会编译,因为animated 没有在任何地方声明。【参考方案4】:

在ViewDidLoad中可以直接使用到那个导航条码。

  override func viewDidLoad() 

  self.navigationController?.setNavigationBarHidden(false, animated: 
   animated)
   

【讨论】:

以上是关于setNavigationBarHidden 不能以编程方式工作?的主要内容,如果未能解决你的问题,请参考以下文章

Swift 调用 setNavigationBarHidden 但视图不会移到顶部

setNavigationBarHidden 动画在 iPhone X 上无法正常工作

setNavigationBarHidden 使整个视图向上/向下滑动

setNavigationBarHidden 在其他类中不起作用(Swift 3.0)

ios UINavgationController setNavigationBarHidden

如何从子视图中隐藏 NavigationBar?