仅将子视图添加到当前视图的UINavigationBar

Tha*_*nos 8 iphone objective-c uikit ios swift

我想要做的是为我的UINavigationController添加一个自定义视图,UINavigationBar但仅限于当前可见的视图控制器.

因此,我通过获取引用来构建我想要在容器视图中添加的视图的子视图,并将此视图添加到导航栏:

let navBar = navigationController?.navigationBar as UINavigationBar!
Run Code Online (Sandbox Code Playgroud)

结果如下:

在此输入图像描述

但是,当我在UINavigationController堆栈中推送另一个视图控制器时,此子视图仍然存在于UINavigationBar推送的viewControllers中:

在此输入图像描述

仅在我当前视图中添加此子视图的最佳方法是什么,UINavigationBar并且还没有在连续的视图控制器上保留它?

mat*_*ven 8

发生这种情况有几个原因:

  1. 向a添加子视图UINavigationBar并不完全不受支持,但可能导致奇怪的行为.

  2. UINavigationController共享中的所有视图控制器都相同UINavigationBar(这就是新推出的视图控制器对子视图没有任何影响的原因).

如果你想正确地做到这一点,这里有两个可能的解决方案:

  1. 当您的理想视图控制器可见时,使用viewWillAppearviewWillDisappear添加/显示和删除/隐藏您的子视图.

  2. 使用UINavigationItemtitleView属性分配此视图,例如:

    // Example code in Obj-C, sorry!
    myViewController.navigationItem.titleView = [[MySearchView alloc] init];
    
    Run Code Online (Sandbox Code Playgroud)

    这样,搜索视图对于该视图控制器将是唯一的.