【问题标题】:I have view controllers in a navigation controller hierarchy, but only want the navigation bar on the first view controller - how do I do this?我在导航控制器层次结构中有视图控制器,但只想要第一个视图控制器上的导航栏 - 我该怎么做?
【发布时间】:2013-04-29 06:18:29
【问题描述】:

我有一个主视图控制器,它列出了一堆项目,当他们点击其中一个项目时,它会将它们切换到下一个视图。但是,在下一个视图中,我不希望导航栏在那里,我只希望它在第一个视图中(我使用 UIToolBar 作为导航栏,有点像in iBooks)。

我该如何实现这一目标?如果我从导航控制器中完全移除主视图控制器(有效地取消嵌入),我可以有选择地实现导航栏,但是这个解决方案不允许 segues,所以它不好。

我的另一个解决方案是在viewDidAppear 中调用self.navigationController.navigationBarHidden = YES; 以获得第二个视图,但是这样,我在情节提要中添加的 UIToolBar 被推到尚未隐藏的导航栏下,然后当它确实被隐藏了,它消失了,并且 UIToolBar “掉下来”,这对用户来说是一个非常严重的影响。

获得这种效果的最佳方法是什么?

【问题讨论】:

    标签: ios objective-c uiviewcontroller uinavigationcontroller uistoryboard


    【解决方案1】:

    最好的方法如下。在 UINavigationController 的第一个 (rootViewController) 中的 viewWillAppear: 中,您设置:

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

    然后在你viewWillDisappear,你是相反的:

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

    这种方式应该不会对用户造成任何“丑陋”的事情发生。

    【讨论】:

    • 等等,黑条出现在rootViewController中?如果是这样,根据您的问题,它应该在那里,不是吗?您可以尝试使用我在上面发布的相同方法,但倒置,在其他视图控制器中推送...如果它有助于解决您的问题,请接受/支持答案。
    • 我想在概念上是有道理的,但在视觉上它看起来并不好,什么是最好的方式来避免这种视觉上的碍眼?我希望导航栏一直在那里,直到它到达下一个视图,它不在。
    • 另外,前一个栏并没有完全消失。当我用这种方法返回时,它会重新出现一秒钟。 i.imgur.com/E38k7fV.png
    • 我删除了第一条评论,因为它具有误导性,但是,是的,黑条确实是一个令人讨厌的问题:i.imgur.com/h4lR6CA.png
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多