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

vet 发布于 2019-03-25 ios 最后更新 2019-03-25 16:44 171 浏览

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

已邀请:

funde

赞同来自:

这对我有用:

  1. plist中将UIViewControllerBasedStatusBarAppearance设置为YES
  2. rootViewController需要方法实现
    -(UIStatusBarStyle)preferredStatusBarStyle
    
因为我的rootViewController由Cocoapods管理(JASidePanelController),所以我通过以下类别添加了此方法:
#import "JASidePanelController+StatusBarStyle.h"
@implementation JASidePanelController (StatusBarStyle)
- (UIStatusBarStyle)preferredStatusBarStyle
{
    return UIStatusBarStyleLightContent;
}
@end

jeum

赞同来自:

我认为所有的答案并没有真正指出问题,因为它们都在特定的情况下工作。但如果您需要涵盖所有案例,请遵循以下几点: 根据您需要的状态栏灯样式,您应始终牢记以下3点: 1)如果您需要启动屏幕或其他地方的状态栏,您无法控制它(不在视图控制器中,而是一些系统控制的元素/时刻,如启动屏幕) 您转到项目设置 Project settings 2)如果您在导航控制器内有控制器 您可以在界面构建器中更改它,如下所示: a)选择导航控制器的导航栏 Select the navigation bar of your navigation controller b)然后将导航栏的样式设置为“黑色”,因为这意味着您的状态栏下方会显示“黑色” - >深色背景,因此会将状态栏设置为白色 enter image description here 或者在代码中执行如下操作

navigationController?.navigationBar.barStyle = UIBarStyle.Black
3)如果您只有控制器需要拥有自己的状态栏样式,并且它没有作为UINavigationController嵌入到某些容器结构中 在控制器的代码中设置状态栏样式: Setting the status bar style in code

tmodi

赞同来自:

您可以在iOS 6和7中使用它:

#ifdef __IPHONE_7_0
# define STATUS_STYLE UIStatusBarStyleLightContent
#else
# define STATUS_STYLE UIStatusBarStyleBlackTranslucent
#endif
[[UIApplication sharedApplication] setStatusBarStyle:STATUS_STYLE animated:YES];

aet

赞同来自:

完成这项工作的关键是只有全屏视图控制器才能决定状态栏的样式。 如果您正在使用导航控制器并希望在每个视图控制器的基础上控制状态栏,您将需要子类化UINavigationController并实现preferredStatusBarStyle,以便它返回topViewController的首选项。 确保将故事板场景中的类引用从UINavigationController更改为子类(例如下面示例中的MyNavigationController)。 (以下适用于我。如果您的应用程序是基于TabBar的,您将希望通过继承UITabBarController来做类似的事情,但我还没有尝试过)。

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

sed_et

赞同来自:

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

Because the status bar is transparent, the view behind it shows through. [...] Use a UIStatusBarStyle constant to specify whether the statusbar content should be dark or light: UIStatusBarStyleDefault displays dark content. [...] UIStatusBarStyleLightContent displays light content. Use when dark content is behind the status bar.
也可能感兴趣:
In iOS 7, you can control the style of the status bar from an individual vew controller and change it while the app runs. To opt in to this behavior, add the UIViewControllerBasedStatusBarAppearance key to an app's Info.plist file and give it the value YES.
我绝对建议您浏览一下该文档,您也可以使用Apple开发者ID访问该文档。

tiure

赞同来自:

关于状态栏更改,这是Apple Guidelines/Instruction。只有黑暗&状态栏中允许亮(同时为黑色)。 这是 - 如何更改状态栏样式: 如果要设置状态栏样式,应用程序级别,请在“.plist”文件中将UIViewControllerBasedStatusBarAppearance设置为NO。 如果您要设置状态栏样式,请在视图控制器级别,然后按照下列步骤操作:

  1. 如果您只需要在UIViewController级别设置状态栏样式,请将UIViewControllerBasedStatusBarAppearance设置为.plist文件中的YES
  2. 在viewDidLoad中添加功能 - setNeedsStatusBarAppearanceUpdate
  3. 覆盖视图控制器中的preferredStatusBarStyle。
-
override func viewDidLoad() {
    super.viewDidLoad()
    self.setNeedsStatusBarAppearanceUpdate()
}
override var preferredStatusBarStyle: UIStatusBarStyle {
    return .lightContent
}
根据状态栏样式设置级别设置.plist的值。 enter image description here 点击 以下是在应用程序启动期间或视图控制器的viewDidLoad期间更改/设置状态栏背景颜色的一些hacky技巧。
extension UIApplication {
var statusBarView: UIView? {
        return value(forKey: "statusBar") as? UIView
    }
}
// Set upon application launch, if you've application based status bar
class AppDelegate: UIResponder, UIApplicationDelegate {
var window: UIWindow?
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
        UIApplication.shared.statusBarView?.backgroundColor = UIColor.red
        return true
    }
}
or 
// Set it from your view controller if you've view controller based statusbar
class ViewController: UIViewController {
override func viewDidLoad() {
        super.viewDidLoad()
UIApplication.shared.statusBarView?.backgroundColor = UIColor.red
    }
}
搜索结果 结果如下: enter image description here

aeius

赞同来自:

只是打电话

[[UINavigationBar appearance] setBarStyle:UIBarStyleBlack];
在里面
-(BOOL)application:(UIApplication *)application 
           didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
}
我的AppDelegate的方法在iOS7中对我很有用。

gnihil

赞同来自:

在Plist中,添加以下内容:

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

cet

赞同来自:

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

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

yut

赞同来自:

你不需要为此做任何代码 您需要在info.plist中添加“查看基于控制器的状态栏外观”键,如下所示:enter image description here &安培;将其值类型设置为Boolean&对NO的价值。 然后单击项目设置,然后单击“常规”选项卡&在“部署信息”下,将首选状态栏样式设置为.Light,如下所示: enter image description here 而已。

et_et

赞同来自:

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

-(UIStatusBarStyle)preferredStatusBarStyle{ 
    return UIStatusBarStyleLightContent; 
} 
这应该就是你所需要的。

et_sed

赞同来自:

只需更改1)Info.plist查看基于控制器的状态栏appearance - > NO 和写 2)

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

edolor

赞同来自:

如果您的应用程序默认需要UIStatusBarStyleLightContent,但您仍希望能够在某些屏幕上使用UIStatusBarStyleDefault,则可以选择在控制器级别管理状态栏颜色,但在这种情况下,您必须覆盖preferredStatusBarStyle在每个视图控制器中(或在基本视图控制器中实现它,所有其他视图控制器将从中继承)。这是解决此问题的另一种方法:

  • 在plist中将UIViewControllerBasedStatusBarAppearance设置为NO
  • UIStatusBarStyle设为UIStatusBarStyleLightContent
所有视图控制器都将使用白色文本作为状态栏。现在仅在需要带有黑色文本的状态栏的视图控制器中添加此方法:
-(void)viewWillAppear:(BOOL)animated  
{  
  [super viewWillAppear:animated];  
  [[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleDefault];
}
-(void)viewWillDisappear:(BOOL)animated  
{  
  [super viewWillAppear:animated];  
  [[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];
}    

xillum

赞同来自:

如果我使用UINavigationController,我在iOS 9和Swift 2.0中制作它

self.navigationController?.navigationBar.barStyle = UIBarStyle.Black
如果我使用模态segue,我会这样做
override func preferredStatusBarStyle() -> UIStatusBarStyle {
    return .LightContent
}

frem

赞同来自:

在iOS 7上,如果你想使用UIViewControllerBasedStatusBarAppearance == YES,你的根视图控制器是UINavigationController,你应该 将它子类化并重载childViewControllerForStatusBarStyle,例如,如下所示:

- (UIViewController*) childViewControllerForStatusBarStyle
{
    return self.viewControllers.lastObject;
}
在此之后,将在推送的视图控制器上调用preferredStatusBarStyle。

ysequi

赞同来自:

我做了一些不同的事情,它对我有用。 没有代码更改,我确实配置了我的.plist文件:

  • 查看基于控制器的状态栏外观>否
  • 状态栏样式> UIStatusBarStyleLightContent(简单字符串)
我希望它有所帮助。

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

cut

赞同来自:

你可以这样做而无需编写任何代码!
执行以下操作以使状态栏文本颜色在整个应用程序中变为白色 在项目plist文件上:

  • 状态栏样式:Transparent black style (alpha of 0.5)
  • 查看基于控制器的状态栏外观:NO
  • 状态栏最初隐藏:NO

podio

赞同来自:

更改所有ViewControllers的状态栏文本颜色 迅捷3 如果在Info.plist中查看基于控制器的状态栏外观= YES 然后对所有NavigationController使用此扩展

extension UINavigationController
{
    override open var preferredStatusBarStyle: UIStatusBarStyle {
    return .lightContent
     }
 }
如果没有UINavigationController并且只有UIViewController,那么使用下面的代码:
extension UIViewController
{
    override open var preferredStatusBarStyle: UIStatusBarStyle {
    return .lightContent
     }
 }
目标c 创建类别类 对于UIViewController 在UIViewController + StatusBarStyle.h中
 @interface UIViewController (StatusBarStyle)
 @end
在UIViewController + StatusBarStyle.m中
 #import "UIViewController+StatusBarStyle.h"
@implementation UIViewController (StatusBarStyle)
 -(UIStatusBarStyle)preferredStatusBarStyle
 {
  return UIStatusBarStyleLightContent;
 }
 @end 
对于UINavigationController 在UINavigationController + StatusBarStyle.h中
 @interface UINavigationController (StatusBarStyle)
 @end
在UINavigationController + StatusBarStyle.m中
 #import "UINavigationController+StatusBarStyle.h"
@implementation UINavigationController (StatusBarStyle)
 -(UIStatusBarStyle)preferredStatusBarStyle
 {
  return UIStatusBarStyleLightContent;
 }
 @end  

eet

赞同来自:

嗯,这对我来说真的像一块蛋糕。 转到您应用的info.plist

  1. View controller-based status bar appearance设为NO
  2. Status bar style设为UIStatusBarStyleLightContent
然后转到您的应用程序代理并粘贴以下代码,您可以在其中设置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];
}
答对了。它对我有用。

jsed

赞同来自:

在iOS 8中: 将NavigationController.NavigationBar.BarStyle = UIBarStyle.Black;添加到viewDidLoad

et_qui

赞同来自:

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

UINavigationBar.appearance().barStyle = .BlackTranslucent
状态栏的文本将为白色:-)!

gautem

赞同来自:

这似乎是当前构建的Xcode和iOS 7的一个问题。 Apple开发者论坛上的一些相关内容位于a search for UIStatusBarStyleLightContent in "iOS 7 Beta Livability" on the Apple Developer Forums *(目前有32个帖子)。 我试图将它设置为轻型版本。 (这只是对Aaron答案的跟进。)

ut_et

赞同来自:

注意:大多数upvoted答案不适用于iOS 7/8 在Info.plist中,将“查看基于控制器的状态栏外观”设置为NO 在AppDelegate中添加

[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions{
   ......
   ...
}    
此解决方案适用于iOS 7/8

veos

赞同来自:

Swift 3 - Xcode 8。 如果您希望状态栏最初隐藏在启动屏幕上,请尝试此操作, 第1步:将以下内容添加到info.plist

  • View controller-based status bar appearanceNO
  • Status bar is initially hiddenYES
第2步:在didFinishLaunchingWithOptions方法中写下此内容。
UIApplication.shared.isStatusBarHidden = false
UIApplication.shared.statusBarStyle = UIStatusBarStyle.lightContent

sunde

赞同来自:

总结一下,编辑您的项目Info.plist并添加: View controller-based status bar appearanceNO Status bar styleOpaque black style 或者如果你有原始键/值plist UIViewControllerBasedStatusBarAppearanceNO UIStatusBarStyleOpaque black style

eut

赞同来自:

对于iOS 7应用,我在Swift项目中使用Xcode 6 beta 5。 这是我做的,它的工作原理: info.plist中:

Enter image description here

lenim

赞同来自:

你可以从info.plist做到这一点: 1)“查看基于控制器的状态栏外观”设置为“否” 2)“状态栏样式”设置为“UIStatusBarStyleLightContent” DONE

mex

赞同来自:

Change in info PLIST 在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
    }

tiure

赞同来自:

非常简单的方法更改状态栏颜色。 创建导航控制器的子类。 在view didload方法中编写此代码。 在所有视图控制器中实现此代码

self.navigationBar.titleTextAttributes = @{NSForegroundColorAttributeName :
                                                                        [UIColor whiteColor],
                                               NSFontAttributeName:[UIFont boldSystemFontOfSize:19]};

hipsum

赞同来自:

请试试这个

[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];
    [application setStatusBarHidden:NO];
    [[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];
    UIView *statusBar = [[[UIApplication sharedApplication] valueForKey:@"statusBarWindow"] valueForKey:@"statusBar"];
    if ([statusBar respondsToSelector:@selector(setBackgroundColor:)]) {
        statusBar.backgroundColor = [UIColor blackColor];
    }

west

赞同来自:

  1. 在.plist文件中将UIViewControllerBasedStatusBarAppearance设置为YES
  2. viewDidLoad中执行[self setNeedsStatusBarAppearanceUpdate];
  3. 添加以下方法:
    - (UIStatusBarStyle)preferredStatusBarStyle
    { 
        return UIStatusBarStyleLightContent; 
    }
    
注意:这不适用于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
}

iest

赞同来自:

如果要将其设置为任何颜色,请使用以下代码。

id statusBarWindow = [[UIApplication sharedApplication] valueForKey:@"statusBarWindow"];
id statusBar = [statusBarWindow valueForKey:@"statusBar"];
SEL setForegroundColor_sel = NSSelectorFromString(@"setForegroundColor:");
if([statusBar respondsToSelector:setForegroundColor_sel]) {
    // iOS 7+
    [statusBar performSelector:setForegroundColor_sel withObject:YourColorHere];
                                                                 ^^^^^^^^^^^^^
}
我知道我正在访问私有API,但我已在许多项目中使用过这个,Apple已经批准了它。 在提交应用程序时,将此代码发送到Apple in Comments部分,并告知您使用此代码更改状态栏颜色。 是的,也不要忘记下面。

jneque

赞同来自:

  • 删除.plist文件中基于视图控制器的状态栏外观(如果您已创建)并重新创建它。
  • 将状态栏样式设置为不透明黑色样式
在appDelegate中,在didFinishLaunching下添加以下代码。
 [[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];

kqui

赞同来自:

只需两个步骤如下: 步骤1: 在project target的“信息”选项卡下,添加行: UIViewControllerBasedStatusBarAppearance,设置值NO。 第2步: 在项目AppDelegate.m中:

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

hiure

赞同来自:

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

-[UINavigationBar setBarStyle:UIBarStyleBlack]
原始答案在这里 https://devforums.apple.com/message/844264#844264

dsit

赞同来自:

我必须为swift和导航控制器做些什么

extension UINavigationController {
    override open var preferredStatusBarStyle: UIStatusBarStyle {
       return .lightContent
    }   
}

khic

赞同来自:

对于Xcode 5.1: 在.plist中将“查看基于控制器的状态栏外观”添加到NO。 在AppDelegate中,添加:

[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];
就这样!

ut_sed

赞同来自:

从Xcode(没有任何编码)这样做的最简单方法是:

  • View controller-based status bar appearance添加到您的Info.plist并将值设置为NO
  • 现在,转到您的项目目标,在Deployment Info内,您将找到Status Bar Style的选项。将此选项的值设置为Light
您将拥有White状态栏。

gnihil

赞同来自:

让我给你一个完整的答案。更改状态栏文本颜色非常容易,但在iOS 7中专门针对新手来说有点混乱。 如果您试图通过选择视图控制器并转到右侧的模拟指标,在Storyboard中将颜色从黑色更改为白色,则它将无法工作,我不知道为什么。它应该通过改变这样,但任何方式。 其次,您不会在plist中找到UIViewControllerBasedStatusBarAppearance属性,但默认情况下它不在那里。您必须通过单击+按钮自己添加它,然后将其设置为NO。 ios 7状态栏文本颜色 最后,您必须转到AppDelegate.m文件并在didFinishLaunchingWithOptions方法中添加以下内容,添加以下行:

     [[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];
这会将所有视图控制器的颜色更改为白色。希望这可以帮助!

quia_a

赞同来自:

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

  1. Info.plist中将View controller-based status bar appearance设置为NO
  2. 致电[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];
注意:此方法已在iOS9中弃用。而是在UIViewController上使用preferredStatusBarStyle。 (见Apple Developer Library)

saut

赞同来自:

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

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions{
[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];
} 
在Plist文件中,将“查看基于控制器的状态栏外观”设置为NO。

eet

赞同来自:

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

[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];

lnon

赞同来自:

在info.plist中设置字段值NO查看基于控制器的状态栏外观并在目标>常规设置中设置状态栏样式指示灯。

liste

赞同来自:

这些都不适合我,所以这是一个有效的解决方案...... 在Info.plist中,添加一行: UIViewControllerBasedStatusBarAppearance,并设置值NO。 然后在didFinishLaunchingWithOptions的AppDelegate中添加以下行:

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

riure

赞同来自:

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

iOS 7 gives view controllers the ability to adjust the style of the status bar while the app is running. A good way to change the status bar style dynamically is to implement preferredStatusBarStyle and—within an animation block—update the status bar appearance and call setNeedsStatusBarAppearanceUpdate.
全局设置状态栏外观分为两步。 首先,您需要告诉iOS您不希望在逐个视图的基础上设置状态栏外观。 然后你需要负责并实际设置新的全局状态栏样式。 要禁用逐个视图状态栏控件,您需要在Info.plist中设置View controller-based status bar appearance属性。 打开Project Navigator并为iOS应用程序选择项目,然后选择Info选项卡。 将鼠标悬停在一行上,然后点击显示的加号,将新属性添加到您的.plist。 在Key字段中输入View controller-based status bar appearance,然后确保Type字段设置为Boolean。最后,在Value字段中输入NO。 要为状态栏设置全局样式,请在“信息”选项卡下添加另一个属性,其中键为Status bar style,类型为String,值为Opaque black style。 这是一篇博文,其中包含更多细节和一些示例代码: http://codebleep.com/setting-the-status-bar-text-color-in-ios-7/

mut

赞同来自:

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

- (UIStatusBarStyle)preferredStatusBarStyle{return UIStatusBarStyleLightContent;}

aut_id

赞同来自:

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

  1. the UIViewControllerBasedStatusBarAppearance设置为NO Info.plist
  2. ViewDidLoad方法或任何地方,您想要更改哪里 状态栏样式: [[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];

dodit

赞同来自:

  1. 转到Project - > Target
  2. 然后将Status Bar Style设置为Light。它使状态栏从启动屏幕变为白色。 Project Setting
  3. 然后将View controller-based status bar appearance设置为Info.plist中的NO

lest

赞同来自:

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

Enter image description here

rtotam

赞同来自:

只需在Appdelegate

[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];

dquis

赞同来自:

为Xcode GM Seed更新的答案:

  1. Info.plist中,将View controller-based status bar appearance设为NO
  2. 在项目中,设置: Enter image description here
  3. 在ViewDidLoad中: [[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];