1、设置状态栏和导航条为同一颜色。只需要在topViewController中设置一行代码就可以了:
[self.navigationController.navigationBar setBarTintColor:[UIColor redColor]];
效果图:
2、设置状态栏样式:
typedef NS_ENUM(NSInteger, UIStatusBarStyle) {
UIStatusBarStyleDefault = 0, // Dark content, for use on light backgrounds
UIStatusBarStyleLightContent NS_ENUM_AVAILABLE_IOS(7_0) = 1, // Light content, for use on dark backgrounds
UIStatusBarStyleBlackTranslucent NS_ENUM_DEPRECATED_IOS(2_0, 7_0, "Use UIStatusBarStyleLightContent") = 1,
UIStatusBarStyleBlackOpaque NS_ENUM_DEPRECATED_IOS(2_0, 7_0, "Use UIStatusBarStyleLightContent") = 2,
} __TVOS_PROHIBITED;
一共有4种样式。
2.1、在有导航条的情况下若是想设置单个viewController的状态栏style。可以这样做:
a、确保info.plist中 View controller-based status bar appearance字段为YES。(默认是YES)
b、自定义导航控制器(FSNavgationController),在该类中实现:
- (UIStatusBarStyle)preferredStatusBarStyle { return [[self.viewControllers lastObject] preferredStatusBarStyle]; } 或: - (UIViewController *)childViewControllerForStatusBarStyle { return self.topViewController; }
c、在对应的控制器类中实现:(备注:一定要实现b的步骤,否则c步骤不执行。)
- (UIStatusBarStyle)preferredStatusBarStyle { return UIStatusBarStyleLightContent;(四种状态中的任意一个) }
3、对于一个viewController的childViewControllers,如何设置不同的childViewController显示不同的状态栏。
a、在viewController类里面实现:
- (UIViewController *)childViewControllerForStatusBarStyle { return self.topViewController; }
b、在子控制器中实现
- (UIStatusBarStyle)preferredStatusBarStyle { return UIStatusBarStyleLightContent;(四种状态中的任意一个) }
4、隐藏导航栏最下面的那根线:
// 备注: 一般是在导航条和导航条下面的view的颜色一样时才会去隐藏导航条下面那条线。
// 所以1、image可以是一个和view颜色一样的一张图片。在没有这样一张图片的情况下,可以用颜色去创建一张图片。
// 2、image还可以是一张无色透明的一张图片,然后在设置导航条的barTintColor和view的颜色一样。
[self.navigationController.navigationBar setBackgroundImage:image forBarPosition:UIBarPositionAny barMetrics:UIBarMetricsDefault];
self.navigationController.navigationBar.shadowImage = [[UIImage alloc] init];