关于状态栏的style和导航栏的研究

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];
原文地址:https://www.cnblogs.com/fs-ios/p/5306464.html