如何使用storyboards隐藏UINavigationController的工具栏?

8

我有一个iOS故事板应用程序,其中包含多个视图。我使用带有“显示工具栏”选项的UINavigationController,然后在我的视图层次结构中进行填充。

假设我的视图流程是3个视图,A、B和C:

View A --(push)--> View B --(push)--> View C

视图A是一个普通的视图控制器,工具栏上有一个按钮用于推送视图B。 视图B是一个表格控制器,因此我想在这里隐藏工具栏。 视图C是另一个像视图A一样的视图,需要显示工具栏。

在Xcode/Storyboard中,如果在视图B中选择“在推送时隐藏底部栏”,它会完全隐藏底部栏。同样,如果我选择“无”作为“底部栏”选择选项,那么视图B就没有栏。很好。

我的问题在于:无论我如何使用视图B的任何选项,我的工具栏都不会在视图C中出现。如果我将视图C的工具栏设置为推断(并取消选中隐藏),它不会显示,即使我手动设置为“工具栏”也不会显示。

有什么想法吗?

2个回答

17

正如@Zoltán所说,Storyboard并不能提供完整的答案。

在viewDidLoad或viewWillAppear中设置self.navigationController.toolbarHidden = YES/NO是可行的,但不够美观(在视图转换动画期间,会出现黑色矩形代替工具栏)。

以下是我为View B控制器所采取的方法(View C的方法相反),以模仿StoryBoard中“推送时隐藏”的选项所具备的动画平稳性:

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

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

你是否包含了 [super viewWillAppear:animated] 和 [super viewWillDisappear:animated] 呢? - Scott Lieberman
1
不要忘记调用super的viewWillAppear和viewWillDisappear! - Florian L.
1
太好了!在Swift中: self.navigationController?.setToolbarHidden(true, animated: true) - abanet

2

我认为你不能纯粹地在故事板中完成它。但是,您可以将其设置为始终显示,并在每个要显示的视图上放置按钮,当加载不想出现工具栏的视图控制器时, 您可以调用self.navigationController.toolbarHidden = YES; 。之后,如果您希望在另一个VC上出现工具栏,请将toolbarHidden设置为NO。


这个可以工作,只是在转换时会出现一个丑陋的黑色标记,因为工具栏已经消失了。但从所需的代码角度来看,它是正确的,而且Storyboard无法提供整个内容。 - Freney

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接