【问题标题】:Fixed Navigation Bar For Different View Controllers修复了不同视图控制器的导航栏
【发布时间】:2018-02-04 08:29:11
【问题描述】:

我正在尝试实现一个导航栏,其内容在不同的视图控制器之间持续存在。例如,我现在有以下功能:

Non Persistent Navigation Bar

我设置了一个imageView作为导航栏的titleView。

导航栏的titleView与这里的视图控制器一起过渡(图片显示了一些淡入淡出的动画)。但我希望它能够在没有任何过渡的情况下保持在每个屏幕的顶部。这意味着只有导航栏下方的视图部分会显示从一个视图控制器到另一个视图控制器的转换。

这在 Swift 中可行吗?

【问题讨论】:

    标签: ios swift navigationbar


    【解决方案1】:

    是的,这是可能的。你可以做的是有一个容器视图控制器,它可以有你的导航栏和一个内容视图控制器。

    现在每次打开一个新的 VC 时,将新的 VC 推送到 containerVC 的 contentVC 上。

    例如:

    let containerVC = self.parentViewController?.containerViewController()
        if let _ = containerVC {
        containerVC.pushContentViewController(newViewController)
    }
            
    

    附上布局截图,便于理解。

    因此,如果您在此处选中,根容器是您可以将新 VC 添加为子 VC 的视图。

    【讨论】:

    • 您能详细说明一下吗?我还没有真正使用过容器视图控制器。
    • 查看有一个顶部带有导航栏的 VC,以及一个包含您的 VC 的视图,该视图将不断变化。将此 VC 称为 containerVC。
    • 我已经编辑了我的答案。请再看一遍。
    【解决方案2】:

    您可以通过更改您的 UIViewController 层次结构来做到这一点。为此,您需要三个视图控制器。第一个将拥有您的UINavigationBarUIView,其他两个UIViewController 的视图将存在。

    让我们用导航栏调用一个MasterViewController,另外两个分别是ViewControllerAViewControllerB

    MasterViewController 的某个地方实例化子视图控制器并将它们添加到您的视图控制器层次结构中。为简单起见,让我们在viewDidLoad() 中执行所有操作,但您可以在任何您认为有必要的地方执行此操作。您甚至可以根据用户的需要延迟加载视图控制器。

    final class ViewControllerA: UIViewController { }
    final class ViewControllerB: UIViewController { }
    
    final class MasterViewController: UIViewController {
    
        var navigationBar = UINavigationBar()
    
        override func viewDidLoad() {
            view.addSubview(navigationBar)
    
            let a = ViewControllerA()
            let b = ViewControllerB()
    
            addChildViewController(a)
            addChildViewController(b)
    
            view.addSubview(a.view)
            // you are ready for transitions from a.view to b.view when necessary
        }
    }
    

    现在您可以进行从a.viewb.view(和返回)的转换,它不会影响主视图(具有navigationBar)中的任何内容。

    请务必注意,视图层次结构和视图控制器层次结构在任何方面都不受欢迎,您有责任管理这两者

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-12-09
      • 2019-05-21
      • 1970-01-01
      • 1970-01-01
      • 2018-04-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多