UINavigationController管理堆栈视图控制器和一个导航栏。它将水平视图转换为推动的导航栏和弹出视图,同时保持同步。
1.创建UINavigationController
//1.先获取首页的视图控制器
let viewController = ViewController()
//2.将首页视图控制器作为UINavigationController的根视图
let navigationController = UINavigationController(rootViewController: viewController)
//3.将UINavigationController控制器作为window根视图
self.window?.rootViewController = navigationController
2.为堆栈视图添加新的视图(跳转到新页面)
//获取新视图
let detailViewContoller = DetailPageViewController()
//将新视图添加到堆栈中
self.navigationController?.pushViewController(detailViewContoller, animated: true)
3.推出堆栈视图中最新的视图(返回上一个页面)
let secondViewContoller = SecondPageViewController()
//推出视图
self.navigationController?.pushViewController(secondViewContoller, animated: true)
4.返回到根视图
self.navigationController?.popToRootViewController(animated: true)
5.导航栈里的控制器
//获取当前导航栈里所有的控制器
self.navigationController?.viewControllers
//获取某个导航的顶部控制器
self.navigationController?.topViewController
//当前访问的控制器
self.navigationController?.visibleViewController
6.显示与隐藏导航栏
//头导航的显示与隐藏
self.navigationController?.isNavigationBarHidden = true
self.navigationController?.setNavigationBarHidden(true, animated: false)
//底部导航的显示与隐藏
self.navigationController?.isToolbarHidden = false
self.navigationController?.setToolbarHidden(false, animated: true)
7.不同事件显示与隐藏导航栏
//当控制器上下滑动,导航的显示与隐藏
self.navigationController?.hidesBarsOnSwipe = true
//用户点击控制器,导航的显示与隐藏
self.navigationController?.hidesBarsOnTap = true
//键盘弹出时隐藏导航
self.navigationController?.hidesBarsWhenKeyboardAppears = true
//当导航栏的垂直size比较紧凑的时候,导航栏自动隐藏
self.navigationController?.hidesBarsWhenVerticallyCompact = true
8.获取导航栏隐藏的手势
//获取上下滑动隐藏导航的手势
let OnSwipeGesture = self.navigationController?.barHideOnSwipeGestureRecognizer.maximumNumberOfTouches = 2
//获取点击控制器隐藏导航的手势
let OnTapGesture = self.navigationController?.barHideOnTapGestureRecognizerOnTapGesture?.numberOfTouchesRequired = 2
9.UINavigationControllerDelegate
//导航跳转调用该函数
func navigationController(_ navigationController: UINavigationController, didShow viewController: UIViewController, animated: Bool) {
// 当前页控制器和跳转后的控制器
print(navigationController,viewController) }
// 导航每次发生跳转前调用的函数
func navigationController(_ navigationController: UINavigationController, willShow viewController: UIViewController, animated: Bool) {
// 当前页控制器和将要跳转后的控制器
print(navigationController,viewController)
}
// 导航支持的屏幕方向
func navigationControllerSupportedInterfaceOrientations(_ navigationController: UINavigationController) -> UIInterfaceOrientationMask {
return .all
}
// 导航首先支持的屏幕方向
func navigationControllerPreferredInterfaceOrientationForPresentation(_ navigationController: UINavigationController) -> UIInterfaceOrientation {
return .portrait
}