iOS 7及更高版本:为每个视图控制器设置状态栏样式

Van*_*ran 77 cocoa-touch ios


我尝试了很多方法来设置状态栏样式(默认或轻量级),但不能让它在每个视图控制器的基础上工作.我只能为整个应用设置状态栏样式.

有人有提示吗?

我试过了 UIViewControllerBasedStatusBarAppearance

-(UIStatusBarStyle)preferredStatusBarStyle{ 
    return UIStatusBarStyleLightContent; 
}
Run Code Online (Sandbox Code Playgroud)

但这些方法不起作用.

Gre*_*reg 139

你试过这个吗?

  1. 在Info.plist中设置"查看基于控制器的状态栏外观"(UIViewControllerBasedStatusBarAppearance)YES.(YES是默认设置,因此您也可以将此值保留在plist之外.)

  2. 在viewDidLoad方法中,调用[self setNeedsStatusBarAppearanceUpdate].

  3. 实现preferredStatusBarStyle,返回此视图控制器所需的状态栏样式.

    - (UIStatusBarStyle) preferredStatusBarStyle { 
        return UIStatusBarStyleLightContent; 
    }
    
    Run Code Online (Sandbox Code Playgroud)

  • 这不适用于故事板,任何帮助? (4认同)
  • 如果您将该代码放在自定义UINavigationController子类中,则@vishal可与基于UINavigationController的应用程序一起使用 (4认同)
  • 在iOS 8中对我不起作用.这只是更改默认值.我需要变成白色,现在变为默认值. (4认同)
  • 你不需要第二步. (3认同)
  • 这款适用于Iphone 5 + ios7.UIViewControllerBasedStatusBarAppearance为NO和[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleBlackTranslucent]; 我的情况正常工作:) (2认同)

vis*_*kar 73

有一个陷阱在这里,如果你的视图控制器内独立的UINavigationController,而不是基于故事板的UINavigationController的一部分,那么上述所有方法都失败了.我遇到了这种情况然后为了将状态栏设置为我使用的轻型样式

[self.navigationController.navigationBar setBarStyle:UIBarStyleBlack];
Run Code Online (Sandbox Code Playgroud)

这对我很有用.

  • 如果隐藏了导航控制器的导航栏,则不起作用. (7认同)

cau*_*maz 22

编辑:此解决方案在iOS 9上已弃用.请选择其他答案之一.

随着UIViewControllerBasedStatusBarAppearance设置为NO,我能够通过设置样式为白色文字:

[UIApplication sharedApplication].statusBarStyle = UIStatusBarStyleBlackTranslucent;
Run Code Online (Sandbox Code Playgroud)

这是因为此样式的文本颜色在iOS 6及更低版本上为白色.

更新:根据@jowie,您可以在iOS8上尝试:

[UIApplication sharedApplication].statusBarStyle = UIBarStyleBlack;
Run Code Online (Sandbox Code Playgroud)


Fen*_*son 14

在Swift中,我能够通过编写:

let tbc : UITabBarController = self.window?.rootViewController as UITabBarController
var moreViewController : UINavigationController = tbc.moreNavigationController

moreViewController.navigationBar.barStyle = UIBarStyle.Black
Run Code Online (Sandbox Code Playgroud)

基本上你对最后一行很感兴趣.
这导致tabbar变为白色:

在此输入图像描述

请注意,我没有更改任何内容Info.plist以实现此结果.
有关更改的更多信息Navigation Status Bar,请查看此链接:http: //www.appcoda.com/customize-navigation-status-bar-ios-7/


小智 13

在viewDidLoad方法上,输入:

目标C.

[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];
[self setNeedsStatusBarAppearanceUpdate];
Run Code Online (Sandbox Code Playgroud)

迅速

UIApplication.shared.statusBarStyle = .lightContent
self.setNeedsStatusBarAppearanceUpdate()
Run Code Online (Sandbox Code Playgroud)


Sof*_*ner 7

我打赌你把你的视图控制器嵌入到导航控制器中.要避免设置导航栏的样式以.Black使用此子类:

class YourNavigationController: UINavigationController {
    override func childViewControllerForStatusBarStyle() -> UIViewController? {
        return topViewController
    }
}
Run Code Online (Sandbox Code Playgroud)


Dar*_*eal 5

迅速:

let tbc : UITabBarController = self.window?.rootViewController as UITabBarController
var moreViewController : UINavigationController = tbc.moreNavigationController
moreViewController.navigationBar.barStyle = UIBarStyle.Black
Run Code Online (Sandbox Code Playgroud)

目标C:

将此附加到controller.m文件viewDidLoad方法中:

[self setNeedsStatusBarAppearanceUpdate].
Run Code Online (Sandbox Code Playgroud)

然后在同一controller.m文件中实现此方法:

- (UIStatusBarStyle) preferredStatusBarStyle { 
    return UIStatusBarStyleLightContent; 
}
Run Code Online (Sandbox Code Playgroud)

官方文档:

https://developer.apple.com/library/ios/documentation/UserExperience/Conceptual/TransitionGuide/Bars.html

我在博客上写的文章:

http://www.ryadel.com/2015/03/04/xcode-set-status-bar-style-and-color-in-objective-c/