首页 文章

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

提问于
浏览
1

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

控制器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 回答

  • 2

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

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

    当点击B和C的后退按钮时,您可能需要调用 popViewControllerAnimated .

    Structure:

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

相关问题