导航堆栈中控制器与自定义导航栏之间的转换

时间:2015-03-18 09:01:32

标签: ios swift uinavigationcontroller uinavigationbar

我有三个控制器,每个控制器在导航栏上都有不同的风格

控制器A:白色导航栏,透明状态栏(以便内容可见),通过导航栏上的自定义bg图像实现

enter image description here

控制器B:白色导航栏,白色状态栏,通过导航栏上的自定义bg图像实现

enter image description here

控制器C:隐藏导航栏,只有带按钮的自定义透明视图

enter image description here

标准用例是A> B> C又回来了

问题是只有一个导航栏对象,当我更新它的可见性或背景图像时,它适用于所有视图控制器。因此,当我从A转到B时,状态栏在转换期间变为白色。当我从B转到C时,即使B仍然可见(或者在它消失之后,取决于我是否在viewWillAppear或viewDidAppear中更改了导航栏),导航栏也会消失。

我的目标是让"分开"所有控制器的导航栏样式,以便它在转换过程中不会发生变化,但是新控制器会使用它自己的导航栏滑入,而旧的控制器会随着导航栏样式不变而消失。

如果没有使用我自己的UINavigationController实现,这样的事情是否可能?

1 个答案:

答案 0 :(得分:2)

是的,这是可能的。 UINavigationController具有navigationBarHidden属性。将其设置为true可隐藏控制器A,B和C的导航控制器。

然后为每个子视图控制器(A,B和C)添加导航栏或按钮,以便使用视图控制器进行推送/弹出。

当点击B和C的后退按钮时,您可能需要致电popViewControllerAnimated

<强>结构:

UINavigationController (with navigationBarHidden set to true)
|
+- UIViewController A
|  |
|  + UINavigationBar
|
+- UIViewController B
|  |
|  + UINavigationBar
|
+- UIViewController C
   |
   + UIButton