我正在尝试实现一个导航栏,其内容在不同的视图控制器之间保持不变。例如,我现在有以下功能:
我已将imageView设置为导航栏的titleView。
导航栏的titleView与视图控制器一起过渡(图像通过淡入和淡出显示一些动画)。但是我希望它能够在没有任何过渡的情况下保持在每个屏幕的顶部。这意味着只有导航栏下方视图的一部分才会显示从一个视图控制器到另一个视图控制器的转换。
Swift可以吗?
答案 0 :(得分:1)
是的,这是可能的。你可以做的是有一个容器视图控制器,它可以有你的导航栏和内容视图控制器。
现在每次打开一个新的VC时,请在containerVC的contentVC上推送新的VC。
例如:
let containerVC = self.parentViewController?.containerViewController()
if let _ = containerVC {
containerVC.pushContentViewController(newViewController)
}
附加布局屏幕截图以获得更多理解。
因此,如果您在此处查看,则根容器是您可以将新VC添加为子VC的视图。
答案 1 :(得分:1)
您可以通过更改UIViewController
层次结构来执行此操作。为此,您需要三个视图控制器。首先,您将拥有UINavigationBar
和UIView
其他两个UIViewController
的观点。
我们分别使用导航栏MasterViewController
和其他两个 - ViewControllerA
,ViewControllerB
调用一个。
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.view
到b.view
(和返回)的转换,它将在主视图(具有navigationBar
)中不会产生任何影响。
请务必注意,视图层次结构和视图控制器层次结构不受任何影响,您负责管理。