我的应用程序有一个黑色的背景,但在iOS 7中状态栏变成透明的了。因此我什么都看不到,只能看到角落里的绿色电池指示器。我该如何将状态栏文本颜色更改为像主屏幕上那样的白色呢?
我的应用程序有一个黑色的背景,但在iOS 7中状态栏变成透明的了。因此我什么都看不到,只能看到角落里的绿色电池指示器。我该如何将状态栏文本颜色更改为像主屏幕上那样的白色呢?
在.plist文件中设置UIViewControllerBasedStatusBarAppearance
为YES
。
在viewDidLoad
方法中执行[self setNeedsStatusBarAppearanceUpdate];
。
添加以下方法:
- (UIStatusBarStyle)preferredStatusBarStyle
{
return UIStatusBarStyleLightContent;
}
注意: 这种方法不适用于嵌套在 UINavigationController
中的控制器,请参考下面Tyson的评论 :)
Swift 3 - 这种方法适用于嵌套在UINavigationController
中的控制器。将以下代码添加到您的控制器中。
// Preferred status bar style lightContent to use on dark background.
// Swift 3
override var preferredStatusBarStyle: UIStatusBarStyle {
return .lightContent
}
Swift 5 和 SwiftUI
对于 SwiftUI,请创建一个名为 HostingController.swift
的新的 Swift 文件。
import Foundation
import UIKit
import SwiftUI
class HostingController: UIHostingController<ContentView> {
override var preferredStatusBarStyle: UIStatusBarStyle {
return .lightContent
}
}
然后在 SceneDelegate.swift
中更改以下代码行:
window.rootViewController = UIHostingController(rootView: ContentView())
到
window.rootViewController = HostingController(rootView: ContentView())
或者,你可以选择退出基于视图控制器的状态栏外观:
Info.plist
中将 View controller-based status bar appearance
设置为 NO
。[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];
注意:这种方法已经在iOS9中被弃用。请改用UIViewController上的 preferredStatusBarStyle
。 (参见Apple Developer Library)
在您的项目 plist文件中:
透明黑色样式(alpha为0.5)
NO
NO
plist info
中没有名为 UIStatusBarStyleLightContent
的东西,但是有一个名为 透明黑色
的选项可以起到相同的效果 :) 另外,您需要添加 View controller-based status bar appearance
,因为它最初不在那里,这就是您需要使其正常工作的全部内容 :) - user1949873<key>UIStatusBarStyle</key> <string>UIStatusBarStyleLightContent</string> <key>UIViewControllerBasedStatusBarAppearance</key> <false/>
这段代码用于设置iOS应用程序状态栏的样式。其中,UIStatusBarStyle
指定状态栏的颜色为白色,UIViewControllerBasedStatusBarAppearance
设置为false表示不基于视图控制器而是全局设置整个应用程序的状态栏样式。 - Adam Waite注意:得票最高的答案在iOS 7/8上不起作用
在Info.plist中将“View controller-based status bar appearance”设置为NO
在AppDelegate中添加
[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];
到
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions{
...
}
这个解决方案适用于iOS 7/8。
对我来说,使用其他答案中提供的所有东西(以及其他来源/文档)都没有任何帮助。有所帮助的是在XIB中将导航栏样式设置为“黑色”。这样就可以在不使用任何代码的情况下将文本更改为白色。
对我来说,这些都不起作用,因此这是一个有效的解决方案...
在 Info.plist
文件中添加一行:
UIViewControllerBasedStatusBarAppearance
,并将值设置为 NO
。
然后在 AppDelegate 的 didFinishLaunchingWithOptions
中添加以下行:
[application setStatusBarHidden:NO];
[application setStatusBarStyle:UIStatusBarStyleLightContent];
只需要两个步骤:
步骤1:
在项目目标
的Info选项卡下,添加行:
UIViewControllerBasedStatusBarAppearance
,将值设置为NO
。
步骤2:
在项目的AppDelegate.m
文件中:
- (BOOL)application:(UIApplication *)application
didFinishLaunchingWithOptions:(NSDictionary *)launchOptions{
…
[application setStatusBarStyle:UIStatusBarStyleLightContent];
…
}
这在Golden Master的iOS 7和Xcode 5 GM种子版本以及于2013年9月18日发布的iOS 7 SDK中运行良好(至少在隐藏导航控制器时):
在Info.plist
中将UIViewControllerBasedStatusBarAppearance
设置为NO
。
在ViewDidLoad
方法或任何需要更改状态栏样式的地方使用以下代码:[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];
UIStatusBarStyleLightContent
改为 UIStatusBarStyleDefault
或 UIStatusBarStyleBlackOpaque
或 UIStatusBarStyleBlackTranslucent
。 - Deniss Fedotovs-[UINavigationBar setBarStyle:UIBarStyleBlack]