我的应用程序背景较暗,但在iOS 7中状态栏变得透明。所以我看不到任何东西,只有角落里的绿色电池指示灯。如何将状态栏文本颜色更改为白色,就像在主屏幕上一样?
答案 0 :(得分:1334)
在.plist文件中将UIViewControllerBasedStatusBarAppearance
设置为YES
。
在viewDidLoad
执行[self setNeedsStatusBarAppearanceUpdate];
添加以下方法:
- (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
}
答案 1 :(得分:843)
或者,您可以选择退出基于视图控制器的状态栏外观:
View controller-based status bar appearance
。{/ li>中将NO
设为Info.plist
[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];
注意:此方法已在iOS9中弃用。请改用UIViewController上的preferredStatusBarStyle
。 (见Apple Developer Library)
答案 2 :(得分:433)
您无需编写任何代码即可完成此操作!
强>
执行以下操作以使状态栏文本颜色在整个应用程序中变为白色
在项目plist 文件:
上Transparent black style (alpha of 0.5)
NO
NO
答案 3 :(得分:241)
注意:大多数赞成的答案不适用于iOS 7/8
在Info.plist中设置'查看基于控制器的状态栏外观'为NO
在AppDelegate中添加
[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];
到
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions{
......
...
}
此解决方案适用于iOS 7/8
答案 4 :(得分:110)
对我而言,在其他答案(以及其他来源/文档)中使用所有内容时没有任何反应。有什么帮助是在XIB中将导航栏样式设置为“黑色”。这将文本更改为白色而没有任何代码。
答案 5 :(得分:96)
这些都不适合我,所以这是一个有效的解决方案......
在Info.plist
中,添加一行:
UIViewControllerBasedStatusBarAppearance
,并设置值NO
。
然后在didFinishLaunchingWithOptions
的AppDelegate中添加以下行:
[application setStatusBarHidden:NO];
[application setStatusBarStyle:UIStatusBarStyleLightContent];
答案 6 :(得分:60)
您不需要为此
执行任何代码您需要添加"查看基于控制器的状态栏外观"在info.plist中键入如下:
&安培;将其值类型设置为Boolean&对NO的价值。 然后单击项目设置,然后单击“常规”选项卡&在“部署信息”下,将首选状态栏样式设置为.Light,如下所示:
多数民众赞成。
答案 7 :(得分:48)
以下两个步骤:
第1步:
在project target
的信息标签下,添加行:
UIViewControllerBasedStatusBarAppearance
,设置值NO
。
第2步:
在项目AppDelegate.m
中:
- (BOOL)application:(UIApplication *)application
didFinishLaunchingWithOptions:(NSDictionary *)launchOptions{
…
[application setStatusBarStyle:UIStatusBarStyleLightContent];
…
}
答案 8 :(得分:43)
这适用于2013年9月18日发布的Golden Master iOS 7和Xcode 5 GM种子和iOS7 SDK(至少隐藏了导航控制器):
将the UIViewControllerBasedStatusBarAppearance
设置为NO
Info.plist
。
在ViewDidLoad
方法或任何地方,您想要更改哪里
状态栏样式:
[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];
答案 9 :(得分:32)
如果您的UIViewController在UINavigationController中,您将必须设置BarStyle:
-[UINavigationBar setBarStyle:UIBarStyleBlack]
原始答案在这里
答案 10 :(得分:29)
如果您通过Interface Builder创建了嵌入式导航控制器,请务必在管理导航控制器的类中设置以下内容:
-(UIStatusBarStyle)preferredStatusBarStyle{
return UIStatusBarStyleLightContent;
}
这应该是你所需要的一切。
答案 11 :(得分:27)
答案 12 :(得分:22)
在AppDelegate.m中,添加以下内容。
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions{
[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];
}
在Plist文件中,将“查看基于控制器的状态栏外观”设置为NO。
答案 13 :(得分:20)
嗯,这对我来说真的像蛋糕一样。
转到您应用的info.plist
。
View controller-based status bar appearance
设为NO
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];
}
宾果。它对我有用。
答案 14 :(得分:20)
答案 15 :(得分:20)
仅限于Appdelegate
[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];
答案 16 :(得分:17)
在Swift 3中只需2步即可轻松实现。
转到info.plist并将密钥View controller-based status bar appearance
更改为"否"。
然后在Appdelegate中,在didfinishlaunchingwithoptions方法中添加这一行
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
// Override point for customization after application launch.
UIApplication.shared.statusBarStyle = .lightContent
return true
}
现在你应该在rootviewcontroller中覆盖这个属性
,这已经在iOS9中被弃用了在iOS 9中不推荐这样做应该在rootviewcontroller上执行此操作
override var preferredStatusBarStyle: UIStatusBarStyle {
return .lightContent
}
答案 17 :(得分:17)
iOS 7允许各个视图控制器确定状态栏的外观,如Apple开发人员文档所述:
iOS 7使视图控制器能够在应用程序运行时调整状态栏的样式。动态更改状态栏样式的一种好方法是在动画块中实现
preferredStatusBarStyle
并更新状态栏外观并调用setNeedsStatusBarAppearanceUpdate
。
全局设置状态栏外观分为两步。
首先,您需要告诉iOS您不希望在逐个视图的基础上设置状态栏外观。
然后你需要负责并实际设置新的全局状态栏样式。
要停用逐个视图状态栏控件,您需要在View controller-based status bar appearance
中设置Info.plist
属性。
打开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/
答案 18 :(得分:12)
无需额外做一些,只需在viewController中编写此代码并获取状态栏颜色为白色
- (UIStatusBarStyle)preferredStatusBarStyle{return UIStatusBarStyleLightContent;}
答案 19 :(得分:12)
为Xcode GM Seed更新了答案:
在Info.plist
将View controller-based status bar appearance
作为NO
在项目中,设置:
在ViewDidLoad中:
[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];
答案 20 :(得分:11)
我认为所有答案都没有真正指出问题,因为它们都适用于特定的场景。但如果您需要涵盖所有案例,请遵循以下几点:
根据您需要状态栏灯样式的位置,您应始终牢记以下3点:
1)如果您需要启动屏幕或其他地方的状态栏,您无法控制它(不在视图控制器中,而是一些系统控制的元素/时刻,如启动屏幕) 您转到项目设置
2)如果您在导航控制器中有控制器 您可以在界面构建器中更改它,如下所示:
b)然后将导航栏的样式设置为“黑色”,因为这意味着您将拥有“黑色” - >状态栏下方的深色背景,因此会将状态栏设置为白色
或者在代码中执行以下操作
navigationController?.navigationBar.barStyle = UIBarStyle.Black
3)如果您只有控制器需要拥有自己的状态栏样式,并且它没有作为UINavigationController嵌入某些容器结构中
在控制器的代码中设置状态栏样式:
答案 21 :(得分:10)
只需致电
[[UINavigationBar appearance] setBarStyle:UIBarStyleBlack];
中的
-(BOOL)application:(UIApplication *)application
didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
}
我的AppDelegate
方法在iOS7中对我很有用。
答案 22 :(得分:9)
iOS 7 UI Transition Guide中记录了这一点,您需要Apple开发人员ID才能直接访问。相关摘录:
因为状态栏是透明的,所以它后面的视图显示出来。 [...]使用
UIStatusBarStyle
常量来指定状态栏内容是暗还是亮:
UIStatusBarStyleDefault
显示黑暗内容。 [...]
UIStatusBarStyleLightContent
显示内容较少。当暗内容位于状态栏后面时使用。
也可能感兴趣:
在iOS 7中,您可以从单个vew控制器控制状态栏的样式,并在应用程序运行时进行更改。要选择加入此行为,请将
UIViewControllerBasedStatusBarAppearance
密钥添加到应用的Info.plist
文件中,并为其指定值YES
。
我绝对建议您浏览一下该文档,您也可以使用Apple开发者ID访问该文档。
答案 23 :(得分:8)
以下是关于状态栏更改的Apple Guidelines/Instruction。只有黑暗&状态栏中允许使用灯光(而黑色)。
以下是 - 如何更改状态栏样式:
如果要设置状态栏样式,应用程序级别,请在“.plist”文件中将UIViewControllerBasedStatusBarAppearance
设置为NO
。
如果您要在视图控制器级别设置状态栏样式,请按照以下步骤操作:
UIViewControllerBasedStatusBarAppearance
文件中将YES
设置为.plist
。 在viewDidLoad添加功能 - setNeedsStatusBarAppearanceUpdate
覆盖视图控制器中的preferredStatusBarStyle。
-
override func viewDidLoad() {
super.viewDidLoad()
self.setNeedsStatusBarAppearanceUpdate()
}
override var preferredStatusBarStyle: UIStatusBarStyle {
return .lightContent
}
根据状态栏样式设置级别设置.plist的值。
以下是在应用程序启动期间或视图控制器的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
}
}
结果如下:
答案 24 :(得分:8)
如果你想要与Swift相同的结果,你可以在你的AppDelegate.swift文件中使用这段代码:
UINavigationBar.appearance().barStyle = .BlackTranslucent
状态栏的文字为白色:-)!
答案 25 :(得分:7)
在Plist中,添加:
UIStatusBarStyleLightContent
NO
答案 26 :(得分:7)
我做了一些不同的事情,它对我有用。
如果代码没有变化,我确实配置了我的.plist文件:
我希望它有所帮助。
对于每个视图控制器,我将故事板中的“状态栏”的模拟度量属性从“推断”更改为“轻量级内容”
答案 27 :(得分:7)
如果您仍想在info.plist中将View controller-based status bar appearance
设置为YES,这意味着您可以更改每个视图控制器的状态栏,请在ViewDidLoad的状态栏中使用以下白色文本:< / p>
[[[self navigationController] navigationBar] setBarStyle:UIBarStyleBlackTranslucent];
答案 28 :(得分:7)
在info.plist中设置字段值NO 查看基于控制器的状态栏外观并在目标&gt;中设置状态栏样式指示灯。一般设定。
答案 29 :(得分:7)
让我给你一个完整的答案。更改状态栏文本颜色非常容易,但在iOS 7中特别适合新手使用它会有点混乱。
如果您试图通过选择视图控制器并转到右侧的模拟指标,在Storyboard中将颜色从黑色更改为白色,那么它将无法工作,我也不知道为什么。它应该通过这样改变,但任何方式。
其次,您在plist中找不到UIViewControllerBasedStatusBarAppearance属性,但默认情况下不存在。您必须通过单击+按钮自行添加它,然后将其设置为NO。
ios 7状态栏文字颜色
最后,您必须转到AppDelegate.m文件并在didFinishLaunchingWithOptions方法中添加以下内容,添加以下行:
[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];
这会将所有视图控制器的颜色更改为白色。希望这有帮助!
答案 30 :(得分:6)
使这项工作的关键是只有全屏视图控制器才能决定状态栏的风格。
如果您正在使用导航控制器并希望在每个视图控制器的基础上控制状态栏,您将需要子类化UINavigationController并实现preferredStatusBarStyle,以便它返回topViewController的首选项。
确保将故事板场景中的类引用从UINavigationController更改为子类(例如下例中的MyNavigationController)。
(以下对我有用。如果您的应用程序是基于TabBar的,您可能希望通过继承UITabBarController来做类似的事情,但我还没有尝试过。)
@interface MyNavigationController : UINavigationController
@end
@implementation MyNavigationController
- (UIStatusBarStyle)preferredStatusBarStyle
{
return self.topViewController.preferredStatusBarStyle;
}
@end
答案 31 :(得分:6)
总结一下,编辑项目Info.plist
并添加:
View controller-based status bar appearance
:NO
Status bar style
:Opaque black style
或者如果您有原始键/值plist
UIViewControllerBasedStatusBarAppearance
:NO
UIStatusBarStyle
:Opaque black style
答案 32 :(得分:5)
对于Swift 5,我添加了以下几行:
override func viewDidAppear(_ animated: Bool) {
navigationController?.navigationBar.barStyle = .black
}
override var preferredStatusBarStyle: UIStatusBarStyle {
return .lightContent
}
答案 33 :(得分:5)
对于Xcode 5.1:
在.plist中将查看基于控制器的状态栏外观添加到否。
在AppDelegate中,添加:
[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];
这就是全部!
答案 34 :(得分:4)
Xcode 似乎一直在改变这一点,所以这是最新的。
要将状态栏更改为白色:
UIViewControllerBasedStatusBarAppearance
并将值设置为 No
(false)。UIStatusBarStyle
并将值设置为 UIStatusBarStyleLightContent
(即轻量内容)。答案 35 :(得分:4)
在Info.plist中设置&#39;查看基于控制器的状态栏外观&#39;没有
在AppDelegate中添加
[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];
答案 36 :(得分:4)
您可以从info.plist:
执行此操作1)“查看基于控制器的状态栏外观”设置为“否”
2)“状态栏样式”设置为“UIStatusBarStyleLightContent”
完成
答案 37 :(得分:3)
在iOS 8中:
将NavigationController.NavigationBar.BarStyle = UIBarStyle.Black;
添加到viewDidLoad
答案 38 :(得分:3)
如果您的应用程序默认需要UIStatusBarStyleLightContent
,但您仍希望能够在某些屏幕上使用UIStatusBarStyleDefault
,则可以选择管理控制器级别的状态栏颜色,但在这种情况下,您将不得不在每个视图控制器中覆盖preferredStatusBarStyle
(或在基本视图控制器中实现它,所有其他视图控制器将从该控制器继承)。这是解决这个问题的另一种方法:
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];
}
答案 39 :(得分:3)
如果我使用UINavigationController
,我会在iOS 9和Swift 2.0中创建self.navigationController?.navigationBar.barStyle = UIBarStyle.Black
如果我使用modal segue
,我会这样做override func preferredStatusBarStyle() -> UIStatusBarStyle {
return .LightContent
}
答案 40 :(得分:3)
从Xcode(没有任何编码)执行此操作的最简单方法是:
View controller-based status bar appearance
添加到您的Info.plist并将值设置为NO
。 Deployment Info
内,您将找到Status Bar Style
的选项。将此选项的值设置为Light
。 您将拥有White
状态栏。
答案 41 :(得分:3)
Swift 3 - Xcode 8。
如果您希望状态栏在启动屏幕上最初隐藏,请尝试此操作,
第1步:将以下内容添加到info.plist
。
View controller-based status bar appearance
值NO
Status bar is initially hidden
值YES
第2步:在didFinishLaunchingWithOptions
方法中将其写下来。
UIApplication.shared.isStatusBarHidden = false
UIApplication.shared.statusBarStyle = UIStatusBarStyle.lightContent
答案 42 :(得分:2)
这似乎是目前Xcode和iOS 7版本的一个问题。
Apple开发者论坛上的一些相关内容位于a search for UIStatusBarStyleLightContent in "iOS 7 Beta Livability" on the Apple Developer Forums *(目前有32个帖子)。
我试图将它设置为轻型版本。
(这只是对Aaron答案的跟进。)
答案 43 :(得分:2)
删除.plist文件中的查看基于控制器的状态栏外观(如果您已创建)并重新创建它。
将状态栏样式设置为不透明的黑色样式
在appDelegate中,在didFinishLaunching下添加以下代码。
[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];
答案 44 :(得分:2)
更改所有ViewControllers的状态栏文本颜色
swift 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
答案 45 :(得分:2)
只需更改 1) Info.plist
查看基于控制器的状态栏appearance
- &gt; NO
和写
的 2)强>
[[UIApplication
sharedApplication]setStatusBarStyle:UIStatusBarStyleLightContent];
在
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
答案 46 :(得分:2)
这对我有用:
在UIViewControllerBasedStatusBarAppearance
YES
设为plist
rootViewController
需要
-(UIStatusBarStyle)preferredStatusBarStyle
由于我的rootViewController
由Cocoapods(JASidePanelController
)管理,因此我通过以下类别添加了此方法:
#import "JASidePanelController+StatusBarStyle.h"
@implementation JASidePanelController (StatusBarStyle)
- (UIStatusBarStyle)preferredStatusBarStyle
{
return UIStatusBarStyleLightContent;
}
@end
答案 47 :(得分:1)
在iOS 7上,如果你想使用UIViewControllerBasedStatusBarAppearance == YES,你的根视图控制器是UINavigationController,你应该 将它子类化并重载childViewControllerForStatusBarStyle,例如,像这样:
- (UIViewController*) childViewControllerForStatusBarStyle
{
return self.viewControllers.lastObject;
}
在此之后,将在推送的视图控制器上调用preferredStatusBarStyle。
答案 48 :(得分:1)
您可以在iOS 6和7中使用它:
#ifdef __IPHONE_7_0
# define STATUS_STYLE UIStatusBarStyleLightContent
#else
# define STATUS_STYLE UIStatusBarStyleBlackTranslucent
#endif
[[UIApplication sharedApplication] setStatusBarStyle:STATUS_STYLE animated:YES];
答案 49 :(得分:1)
请试试这个
[[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];
}
答案 50 :(得分:1)
UINavigationController
是UIViewController
(谁知道?)的子类!
因此,当展示嵌入在导航控制器中的视图控制器时,并不是真正展示嵌入的视图控制器;您正在展示导航控制器! UINavigationController
作为UIViewController
的子类,继承了preferredStatusBarStyle
和childForStatusBarStyle
,您可以根据需要设置它们。
以下任何一种方法都可以使用:
info.plist
中,添加以下属性:
UIUserInterfaceStyle
(又称“用户界面样式”) 在preferredStatusBarStyle
内覆盖UINavigationController
preferredStatusBarStyle
(doc)-视图控制器的首选状态栏样式子类或扩展UINavigationController
class MyNavigationController: UINavigationController {
override var preferredStatusBarStyle: UIStatusBarStyle {
.lightContent
}
}
OR
extension UINavigationController {
open override var preferredStatusBarStyle: UIStatusBarStyle {
.lightContent
}
}
在childForStatusBarStyle
内覆盖UINavigationController
childForStatusBarStyle
(doc)-在系统需要视图控制器用于确定状态栏样式时调用“如果容器视图控制器从其子视图控制器之一派生其状态栏样式,请[重写此属性]并返回该子视图控制器。如果返回nil或不重写此方法,则状态栏样式为使用self。如果此方法的返回值发生变化,请调用setNeedsStatusBarAppearanceUpdate()方法。“
子类或扩展UINavigationController
class MyNavigationController: UINavigationController {
override var childForStatusBarStyle: UIViewController? {
topViewController
}
}
OR
extension UINavigationController {
open override var childForStatusBarStyle: UIViewController? {
topViewController
}
}
您可以返回上面想要的任何视图控制器。我推荐以下之一:
注意:如果您决定继承UINavigationController
的子类,请记住通过IB中的身份检查器将该类应用于您的导航控制器。
P.S。这适用于iOS 13?
答案 51 :(得分:0)
我必须为swift和导航控制器做些什么
extension UINavigationController {
override open var preferredStatusBarStyle: UIStatusBarStyle {
return .lightContent
}
}
答案 52 :(得分:0)
这是一个更好的解决方案 扩展导航控制器并放入故事板
class NVC: UINavigationController {
override var preferredStatusBarStyle: UIStatusBarStyle {
return .lightContent
}
override func viewDidLoad() {
super.viewDidLoad()
self.navigationBar.isHidden = true
self.navigationController?.navigationBar.isTranslucent = false
self.navigationBar.barTintColor = UIColor.white
setStatusBarColor(view : self.view)
}
func setStatusBarColor(view : UIView){
if #available(iOS 13.0, *) {
let app = UIApplication.shared
let statusBarHeight: CGFloat = app.statusBarFrame.size.height
let statusbarView = UIView()
statusbarView.backgroundColor = UIColor.black
view.addSubview(statusbarView)
statusbarView.translatesAutoresizingMaskIntoConstraints = false
statusbarView.heightAnchor
.constraint(equalToConstant: statusBarHeight).isActive = true
statusbarView.widthAnchor
.constraint(equalTo: view.widthAnchor, multiplier: 1.0).isActive = true
statusbarView.topAnchor
.constraint(equalTo: view.topAnchor).isActive = true
statusbarView.centerXAnchor
.constraint(equalTo: view.centerXAnchor).isActive = true
} else {
let statusBar = UIApplication.shared.value(forKeyPath: "statusBarWindow.statusBar") as? UIView
statusBar?.backgroundColor = UIColor.black
}
}
}
状态栏颜色为黑色,文字为白色
答案 53 :(得分:0)
此解决方案适用于使用 新 SwiftUI Lifecycle / iOS 14.0 的应用:
我需要动态更改状态栏文本颜色,但无法访问 window.rootViewController
,因为 SwiftUI 生命周期中不存在 SceneDelegate
。
我终于找到了 Xavier Donnellon 的这个简单的解决方案:https://github.com/xavierdonnellon/swiftui-statusbarstyle
将 StatusBarController.swift
文件复制到您的项目中并将您的主视图包装到 RootView
中:
@main
struct ProjectApp: App {
var body: some Scene {
WindowGroup {
//wrap main view in RootView
RootView {
//Put the view you want your app to present here
ContentView()
//add necessary environment objects here
}
}
}
}
然后您可以通过使用 .statusBarStyle(.darkContent)
或 .statusBarStyle(.lightContent)
视图修饰符,或通过调用例如更改状态栏文本颜色UIApplication.setStatusBarStyle(.lightContent)
直接。
不要忘记在 Info.plist 中将“基于视图控制器的状态栏外观”设置为“是”。
答案 54 :(得分:0)
If you want to set it to any color, use below code.
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];
^^^^^^^^^^^^^
}
I know I am accessing private API, but I have used this in many projects and Apple have approved it.
Just while submitting the app, send this code to Apple in Comments section and inform that you are using this code to change the status bar color.
And yes, don't forget below too.
答案 55 :(得分:-1)
"Finder": {
"Id": "23216245567u4",
"ElemId": "finder",
"Title": "Your Finder",
"Description": "This is a description",
"ResultsTitle": "What program or service are you looking for?",
"CategoryTitle": "Great! Select a category to continue..",
"Results": [
{
...
}
{
...
}
]
}
let finder = this.state.finder;
console.log(finder.Results);
for (var i = 0; i < finder.Results.length; i++) {
console.log(finder.Results[i]);
}
答案 56 :(得分:-2)
非常简单的方法更改状态栏颜色。 创建导航控制器的子类。
在view didload方法中编写此代码。 在所有视图控制器中实现此代码
self.navigationBar.titleTextAttributes = @{NSForegroundColorAttributeName :
[UIColor whiteColor],
NSFontAttributeName:[UIFont boldSystemFontOfSize:19]};