【问题标题】:Hide NavigationBar for one ViewController in Storyboard在 Storyboard 中隐藏一个 ViewController 的 NavigationBar
【发布时间】:2012-10-21 11:26:00
【问题描述】:

我找到了很多帖子,但仍然没有解决方案。我试图在最初的UIViewController 上隐藏一个 NavigationBar,但我仍想在第二个UIViewController 上显示它。这是我的故事板:

当我关闭主视图控制器的推断顶部栏时,它会在 Storyboard 中消失,但在我运行应用程序时仍会显示。当我对 NavController 中的 NavigationBar 执行相同操作时,它对所有三个都消失了(因为它们都继承了 no Nav Bar)。

我想在 ScrollViewV 视图控制器中显示 NavBar,但将其隐藏在 MainViewController 中。

所有控制器都有相应的 .h 或 .m 文件,但我对如何以编程方式执行此操作感到困惑。如果您需要查看其他内容,请告诉我。非常感谢!

【问题讨论】:

    标签: iphone ios xcode uinavigationcontroller navbar


    【解决方案1】:

    在您的 mainViewController 中,您可以执行以下操作:

    - (void)viewWillAppear:(BOOL)animated
    {
        [self.navigationController setNavigationBarHidden:YES animated:animated];
        [super viewWillAppear:animated];
    }
    

    您可能希望在隐藏此 ViewController 时显示导航栏,为此请执行以下操作:

    - (void)viewDidDisappear: (BOOL)animated
    {
        [self.navigationController setNavigationBarHidden:NO animated:animated];
        [super viewDidDisappear:animated];
    }
    

    【讨论】:

    • 感谢您的替代答案!
    • 这是覆盖 viewWillAppear 的更好答案。谢谢你,很抱歉在回答之前没有进一步调查。
    • @KyleClegg viewDidLoad 方法仅在创建 ViewController 时第一次调用。
    • 这在从隐藏了导航栏的视图控制器移回时不起作用
    • @Sam 是的,问题是只隐藏一个视图控制器。如果您想返回隐藏导航栏的视图控制器,请删除 [self.navigationController setNavigationBarHidden:NO animated:animated]; 行,以便导航栏保持隐藏状态
    【解决方案2】:

    如果您想在 Storyboard 中保留内容而不是编辑用户定义的属性和 将 navigationController.navigationBarHidden 设置为布尔检查。

    【讨论】:

    • 这是个好建议
    • 这行得通,但您将无法在另一个 ViewController 中使用相同的技巧显示 NavigationBar。 (用户定义的运行时属性在 Nib 加载时应用,而不是在 viewWillAppear)
    【解决方案3】:
    self.navigationController.navigationBarHidden = YES;
    

    【讨论】:

    • 谢谢!所以这意味着由于其他人是继承的,我必须将它设置为在我拥有的其他 ViewControllers 上可见?这真的很容易......再次感谢。
    • 另外,当我在 ScrollView View Controller 中回击 NavBar 时,它会在 Main View Controller 中再次显示导航栏...如何使其永久化?
    • 您的意思是您根本不需要删除导航栏?这不是一个好主意,但是如果您仍然需要它,您需要扩展导航控制器并在其viewDidLoad 中以同样的方式禁用它:self.navigationBarHidden = YES;
    • 不完全。我希望它在我的主视图控制器上始终保持隐藏状态,但显示在 ScrollView 视图控制器和我可能添加的任何其他视图上。
    【解决方案4】:

    我注意到您还需要将以下内容添加到您希望显示导航的控制器中。

    [self.navigationController setNavigationBarHidden:NO animated:animated];
    [super viewWillAppear:animated];
    

    【讨论】:

      【解决方案5】:

      有人想知道如何在 Swift 中做到这一点吗?

      override func viewDidAppear(animated: Bool) {
          super.viewDidAppear(animated)
          self.navigationController?.navigationBar.hidden = true
      }
      

      【讨论】:

      • 来自doc:“如果你重写了这个方法,你必须在你的实现中调用super。”
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-01-04
      • 1970-01-01
      • 2013-10-22
      • 2012-07-07
      • 2012-03-10
      • 2021-06-03
      • 1970-01-01
      相关资源
      最近更新 更多