【问题标题】:Transitions between controllers within navigation stack with custom navigation bars带有自定义导航栏的导航堆栈中的控制器之间的转换
【发布时间】:2015-03-18 09:01:31
【问题描述】:

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

Controller A:白色导航栏,透明状态栏(让内容可见),通过navbar上自定义bg图片实现

Controller B:白色导航栏,白色状态栏,通过navbar自定义bg图片实现

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

标准用例是 A > B > C 然后再返回

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

我的目标是为所有控制器提供“单独的”导航栏样式,这样它就不会在转换过程中发生变化,但是新控制器会滑入它自己的导航栏,而旧控制器会在其导航栏样式不变的情况下消失。

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

【问题讨论】:

    标签: ios swift uinavigationcontroller uinavigationbar


    【解决方案1】:

    是的,这是可能的。 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
    

    【讨论】:

    • A 的导航栏是我需要自己创建的还是用视图伪造的?当我将 navigationBarHidden 设置为 true 时,我在任何地方都看不到任何导航栏
    • 是的,您必须创建一个导航栏并将其放置到 A 的子视图中。编辑答案以获得更清晰的解释。
    • 我采用了类似的解决方案。我没有隐藏导航栏,我只是将其背景设置为透明图像,并在其下方使用所需图像创建自定义视图。这样我得到了我想要的,但我保留了导航栏的功能(如后退按钮和东西),两全其美。我正在等待几天,看看这个解决方案是否有任何不可预见的问题
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-01-17
    • 1970-01-01
    • 2011-01-07
    • 2017-05-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多