首页 文章

如何在iOS中更改状态栏文本颜色

提问于
浏览
937

我的应用程序背景较暗,但在iOS 7中,状态栏变得透明 . 所以我看不到任何东西,只有角落里的绿色电池指示灯 . 如何将状态栏文本颜色更改为白色,就像在主屏幕上一样?

30 回答

  • 1320

    这适用于2013年9月18日发布的Golden Master iOS 7和Xcode 5 GM种子和iOS7 SDK(至少隐藏了导航控制器):

    • Info.plist 中将 the UIViewControllerBasedStatusBarAppearance 设置为 NO .

    • ViewDidLoad 方法或任何地方,您要在哪里更改状态栏样式: [[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];

  • 6

    You dont need to do any code for this

    您需要在info.plist中添加"View controller-based status bar appearance"键,如下所示:

    并将其值类型设置为布尔值,将值设置为NO . 然后单击项目设置,然后单击“常规”选项卡并在“部署信息”下将首选状态栏样式设置为.Light,如下所示:

    而已 .

  • 10

    注意:大多数upvoted答案不适用于iOS 7/8

    在Info.plist中,将“查看基于控制器的状态栏外观”设置为NO

    在AppDelegate中添加

    [[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];
    

    - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions{
       ......
       ...
    }
    

    此解决方案适用于iOS 7/8

  • 7

    这些都不适合我,所以这是一个有效的解决方案......

    Info.plist 中,添加一行:

    UIViewControllerBasedStatusBarAppearance ,并设置值 NO .

    然后在 didFinishLaunchingWithOptions 中的AppDelegate中添加以下行:

    [application setStatusBarHidden:NO];
    [application setStatusBarStyle:UIStatusBarStyleLightContent];
    
  • 109

    只是打电话

    [[UINavigationBar appearance] setBarStyle:UIBarStyleBlack];
    

    在里面

    -(BOOL)application:(UIApplication *)application 
               didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    }
    

    我的 AppDelegate 方法在iOS7中对我很有用 .

  • 12

    完成这项工作的关键是只有全屏视图控制器才能决定状态栏的样式 .

    如果您正在使用导航控制器并希望在每个视图控制器的基础上控制状态栏,您将需要子类化UINavigationController并实现preferredStatusBarStyle,以便它返回topViewController的首选项 .

    确保将故事板场景中的类引用从UINavigationController更改为子类(例如下面示例中的MyNavigationController) .

    (以下适用于我 . 如果您的应用程序是基于TabBar的,您将希望通过继承UITabBarController来做类似的事情,但我还没有尝试过) .

    @interface MyNavigationController : UINavigationController
    
    @end
    
    @implementation MyNavigationController
    
    - (UIStatusBarStyle)preferredStatusBarStyle
    {
        return self.topViewController.preferredStatusBarStyle;
    }
    
    @end
    
  • 20

    为Xcode GM Seed更新的答案:

    • Info.plistView controller-based status bar appearance 作为 NO

    • 在项目中,设置:

    Enter image description here

    • 在ViewDidLoad中:

    [[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];

  • 16

    我做了一些不同的事情,它对我有用 .

    没有代码更改,我确实配置了我的.plist文件:

    • 查看基于控制器的状态栏外观> NO

    • 状态栏样式> UIStatusBarStyleLightContent(简单字符串)

    我希望它有所帮助 .

    编辑

    对于每个视图控制器,我将故事板中的“状态栏”的模拟度量属性从“推断”更改为“轻量级内容”

  • 19

    总结一下,编辑项目 Info.plist 并添加:

    View controller-based status bar appearanceNO

    Status bar styleOpaque black style

    或者如果你有原始键/值plist

    UIViewControllerBasedStatusBarAppearanceNO

    UIStatusBarStyleOpaque black style

  • 11
    • 在.plist文件中将 UIViewControllerBasedStatusBarAppearance 设置为 YES .

    • viewDidLoad[self setNeedsStatusBarAppearanceUpdate];

    • 添加以下方法:

    - (UIStatusBarStyle)preferredStatusBarStyle
    { 
        return UIStatusBarStyleLightContent; 
    }
    

    Note :这不适用于 UINavigationController 内的控制器,请参阅Tyson's comment below :)

    Swift 3 - 这将在 UINavigationController 中使用控制器 . 在控制器中添加此代码 .

    // Preferred status bar style lightContent to use on dark background.
    // Swift 3
    override var preferredStatusBarStyle: UIStatusBarStyle {
        return .lightContent
    }
    
  • 7

    对我来说,在其他答案(以及其他来源/文档)中使用所有内容时没有任何反应 . 帮助是在XIB中将导航栏样式设置为“黑色” . 这将文本更改为白色而没有任何代码 .

    Enter image description here

  • 48

    在info.plist中设置字段值NO View controller-based status bar appearance 并在目标>常规设置中设置 statusbar 样式指示灯 .

  • 241

    如果您仍希望将info.plist中的 View controller-based status bar appearance 设置为YES,这意味着您可以更改每个视图控制器的状态栏,请在ViewDidLoad的状态栏中使用以下白色文本:

    [[[self navigationController] navigationBar] setBarStyle:UIBarStyleBlackTranslucent];
    
  • 56

    Simply In Appdelegate

    [[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];
    
  • 7

    如果您有通过Interface Builder创建的嵌入式导航控制器,请务必在管理导航控制器的类中设置以下内容:

    -(UIStatusBarStyle)preferredStatusBarStyle{ 
        return UIStatusBarStyleLightContent; 
    }
    

    这应该就是你所需要的 .

  • 8

    无需额外做一些,只需在viewController中编写此代码并获取状态栏颜色为白色

    - (UIStatusBarStyle)preferredStatusBarStyle{return UIStatusBarStyleLightContent;}
    
  • 7

    You can do this without writing any line of code! 执行以下操作,使整个应用程序的状态栏文本颜色为白色

    在你 project plist 文件:

    • 状态栏样式: Transparent black style (alpha of 0.5)

    • 查看基于控制器的状态栏外观: NO

    • 状态栏最初隐藏: NO

  • 17

    对于iOS 7应用程序,我在Swift项目中使用Xcode 6 beta 5 .

    这是我做的,它的工作原理:

    info.plist中:

    Enter image description here

  • 43

    在Swift 3中只需2步即可轻松实现 . 转到info.plist并将密钥 View controller-based status bar appearance 更改为"NO" . 然后在Appdelegate中,在didfinishlaunchingwithoptions方法中添加这一行

    func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
            // Override point for customization after application launch.
            UIApplication.shared.statusBarStyle = .lightContent
            return true
        }
    
  • 32

    这在iOS 7 UI Transition Guide中有记录,您需要Apple开发人员ID才能直接访问 . 相关摘录:

    因为状态栏是透明的,所以它后面的视图显示出来 . [...]使用UIStatusBarStyle常量指定状态栏内容是暗还是亮:UIStatusBarStyleDefault显示暗内容 . [...] UIStatusBarStyleLightContent显示轻量级内容 . 当暗内容位于状态栏后面时使用 .

    也可能感兴趣:

    在iOS 7中,您可以从单个vew控制器控制状态栏的样式,并在应用程序运行时进行更改 . 要选择加入此行为,请将UIViewControllerBasedStatusBarAppearance键添加到应用程序的Info.plist文件中,并为其指定值YES .

    我绝对建议您浏览一下该文档,您也可以使用Apple开发者ID访问该文档 .

  • 6

    嗯,这对我来说真的像一块蛋糕 .

    转到您应用的 info.plist .

    • 设置 View controller-based status bar appearanceNO

    • 设置 Status bar styleUIStatusBarStyleLightContent

    然后转到您的应用程序代理并粘贴以下代码,您可以在其中设置Windows的RootViewController .

    #define SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(v)  ([[[UIDevice currentDevice] systemVersion] compare:v options:NSNumericSearch] != NSOrderedAscending)
    
    if (SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(@"7.0"))
    {
        UIView *view=[[UIView alloc] initWithFrame:CGRectMake(0, 0,320, 20)];
        view.backgroundColor=[UIColor colorWithRed:0/255.0 green:0/255.0 blue:0/255.0 alpha:1.0];
        [self.window.rootViewController.view addSubview:view];
    }
    

    答对了 . 它对我有用 .

  • 95

    iOS 7允许各个视图控制器确定状态栏的外观,如Apple开发人员文档所述:

    iOS 7使视图控制器能够在应用程序运行时调整状态栏的样式 . 动态更改状态栏样式的一种好方法是在动画块中实现preferredStatusBarStyle并更新状态栏外观并调用setNeedsStatusBarAppearanceUpdate .

    全局设置状态栏外观分为两步 .

    首先,您需要告诉iOS您不希望在逐个视图的基础上设置状态栏外观 .

    然后你需要负责并实际设置新的全局状态栏样式 .

    要禁用逐个视图状态栏控件,您需要在 Info.plist 中设置 View controller-based status bar appearance 属性 .

    打开Project Navigator并为iOS应用程序选择项目,然后选择Info选项卡 .

    将鼠标悬停在一行上,然后点击显示的加号,将新属性添加到 .plist .

    在Key字段中输入 View controller-based status bar appearance ,然后确保Type字段设置为 Boolean . 最后,在“值”字段中输入 NO .

    要为状态栏设置全局样式,请在“信息”选项卡下添加另一个属性,其键为 Status bar style ,类型为 String ,值为 Opaque black style .

    这是一篇博文,其中包含更多细节和一些示例代码:

    http://codebleep.com/setting-the-status-bar-text-color-in-ios-7/

  • 29

    如果你想要与Swift相同的结果,你可以在你的AppDelegate.swift文件中使用这个代码:

    UINavigationBar.appearance().barStyle = .BlackTranslucent
    

    状态栏的文本将为白色:-)!

  • 27

    在AppDelegate.m中,添加以下内容 .

    - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions{
    
    [[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];
    
    }
    

    在Plist文件中,将“查看基于控制器的状态栏外观”设置为NO .

  • 22

    如果您的UIViewController在UINavigationController中,您将必须设置BarStyle:

    -[UINavigationBar setBarStyle:UIBarStyleBlack]
    

    原始答案在这里

    https://devforums.apple.com/message/844264#844264

  • 20

    我认为所有的答案并没有真正指出问题,因为它们都在特定的情况下工作 . 但如果您需要涵盖所有案例,请遵循以下几点:

    根据您需要的状态栏灯样式,您应始终牢记以下3点:

    1)If you need the status bar at the launch screen or in other places, where you can't control it (not in view controllers, but rather some system controlled elements/moments like Launch Screen) 您转到项目设置

    2) if you have a controller inside a navigation controller 您可以在界面构建器中更改它,如下所示:

    a)选择导航控制器的导航栏

    b)然后将导航栏的样式设置为“黑色”,因为这意味着您的状态栏下方会显示“黑色” - >深色背景,因此会将状态栏设置为白色

    或者在代码中执行如下操作

    navigationController?.navigationBar.barStyle = UIBarStyle.Black
    

    3) If you have the controller alone that needs to have it's own status bar style and it's not embedded in some container structure as a UINavigationController

    在控制器的代码中设置状态栏样式:

  • 12

    只需两个步骤如下:

    Step 1:

    project target 的“信息”选项卡下,添加行:

    UIViewControllerBasedStatusBarAppearance ,设定值 NO .

    Step 2:

    在项目 AppDelegate.m

    - (BOOL)application:(UIApplication *)application 
            didFinishLaunchingWithOptions:(NSDictionary *)launchOptions{
        …
        [application setStatusBarStyle:UIStatusBarStyleLightContent];
        …
    }
    
  • 9

    让我给你一个完整的答案 . 更改状态栏文本颜色非常容易,但在iOS 7中专门针对新手来说有点混乱 .

    如果您试图通过选择视图控制器并转到右侧的模拟指标,在Storyboard中将颜色从黑色更改为白色,则它将无法工作,我不知道为什么 . 它应该通过改变这样,但任何方式 .

    其次,您不会在plist中找到UIViewControllerBasedStatusBarAppearance属性,但默认情况下它不在那里 . 您必须通过单击按钮自己添加它,然后将其设置为NO .

    ios 7状态栏文本颜色

    最后,您必须转到AppDelegate.m文件并在didFinishLaunchingWithOptions方法中添加以下内容,添加以下行:

    [[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];
    

    这会将所有视图控制器的颜色更改为白色 . 希望这可以帮助!

  • 432

    或者,您可以选择退出基于视图控制器的状态栏外观:

    • Info.plist 中将 View controller-based status bar appearance 设为 NO .

    • 致电 [[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];

    注意:此方法已在iOS9中弃用 . 使用 preferredStatusBarStyle 相反,UIViewController . (见Apple Developer Library

  • 841
    • 转到 Project - > Target

    • 然后将 Status Bar Style 设置为 Light . 它使状态栏从启动屏幕变为白色 .

    • 然后在 Info.plist 中将 View controller-based status bar appearance 设置为 NO .

相关问题