1.状态栏
-
控制状态栏的对象
UIApplication
UINavigationController
UIViewController
-
控制区分
-
View controller-based status bar appearance
设置为false
,由UIApplication
控制状态栏。iOS 9
以后被弃用,可以使用,会爆警告⚠️。
///隐藏 与显示 UIApplication.shared.setStatusBarHidden(true, with:UIStatusBarAnimation.none) UIApplication.shared. isStatusBarHidden = true /// 样式 UIApplication.shared.setStatusBarStyle(UIStatusBarStyle.default, animated: true) UIApplication.shared.statusBarStyle = .defaul UIApplication.shared.statusBarStyle = .default /// 方向 UIApplication.shared.setStatusBarOrientation(UIInterfaceOrientation.portrait, animated: true) UIApplication.shared.statusBarOrientation = UIInterfaceOrientation.portrait
-
View controller-based status bar appearance
设置为true
。状态栏由ViewController
控制。
/// 隐藏 override var prefersStatusBarHidden: Bool{ return true } ///样式 override var preferredStatusBarStyle: UIStatusBarStyle{ return .default } /// 动画方式 override var preferredStatusBarUpdateAnimation: UIStatusBarAnimation{ return UIStatusBarAnimation.none } /// 如果ViewController 包含一个子控制,想由子控制器控制状态栏。 override var childForStatusBarStyle: UIViewController?{ return childVC // 默认为nil self控制 } override var childForStatusBarHidden: UIViewController?{ return childVC // 默认为nil self控制 } /// 如果是Modal Presentation 呈现的视图, 若视图fullscreen 全屏,则由改视图控制.否则由其下层视图控制。 ///若在视图non-fullscreen非全屏是强行控制,则重写下面属性,返回true. /// 父类定义的属性读写 实现其set get override var modalPresentationStyle: UIModalPresentationStyle{ get{ return .formSheet } set{ super.modalPresentationStyle = newValue } } override var modalPresentationCapturesStatusBarAppearance: Bool{ return true }
- 如果有导航栏控制器。相当于导航栏控制器内添加子控制器,等同于控制器内添加子控制器的处理方法
- 导航栏控制状态栏。
/// 隐藏 override var prefersStatusBarHidden: Bool{ return true } ///样式 override var preferredStatusBarStyle: UIStatusBarStyle{ return .default } /// 动画方式 override var preferredStatusBarUpdateAnimation: UIStatusBarAnimation{ return UIStatusBarAnimation.none }
-
ViewController
控制状态栏 。
override var childForStatusBarStyle: UIViewController?{ return visibleViewController // 导航栏栈内最顶部可见控制器 } override var childForStatusBarHidden: UIViewController?{ return visibleViewController }
-
- 导航栏
navigationController?.setNavigationBarHidden(true, animated: animated)
/// 直接隐藏navigationBar视图,不接收事件,仍保留在父视图的subviews内,仍然参与视图布局。
/// 此方法隐藏显示视图 可能会导致一些问题 。
///如B界面同时隐藏状态栏和导航栏,A界面不隐藏,当从B返回A界面时 A界面的导航栏上移到状态栏的位置。上面的方法不会出现该问题
navigationController?.navigationBar.isHidden = true
3.标签栏
/// 可以在展示的界面的任何位置设置隐藏标签栏,但返回时上个界面的额标签栏会出现
tabBarController?.tabBar.isHidden = true
/// 在push 时获得控制器设置 隐藏标签栏,覆盖下一级
vc.hidesBottomBarWhenPushed = true
/// 可以在UINavigationController 内统一设置
override func pushViewController(_ viewController: UIViewController, animated: Bool) {
if viewControllers.count == 1 { /// rootViewController 的下一个控制器设置隐藏
viewController.hidesBottomBarWhenPushed = true
}
super.pushViewController(viewController, animated: animated)
}
///上面方法可能会导致 tabbar 的title选中字体颜色 或 图片 渲染 问题 可能变成蓝色
要在 UITabBarController 的初始化时 设置 渲染颜色 tintColor
tabBar.tintColor = KDEColorRBG