如何在iOS中更改状态栏文本颜色
我的应用程序背景很暗,但在iOS 7中,状态栏变得透明。所以我在那里什么也看不见,只有角落里的绿色电池指示灯。如何将状态栏文本颜色更改为主屏幕上的白色?这在中有说明,您需要Apple开发者ID才能直接访问。相关摘录: 因为状态栏是透明的,所以它后面的视图显示为透明。[…]使用如何在iOS中更改状态栏文本颜色,ios,swift,ios7,statusbar,uistatusbar,Ios,Swift,Ios7,Statusbar,Uistatusbar,我的应用程序背景很暗,但在iOS 7中,状态栏变得透明。所以我在那里什么也看不见,只有角落里的绿色电池指示灯。如何将状态栏文本颜色更改为主屏幕上的白色?这在中有说明,您需要Apple开发者ID才能直接访问。相关摘录: 因为状态栏是透明的,所以它后面的视图显示为透明。[…]使用UIStatusBarStyle常量指定状态栏内容是暗还是亮: UIStatusBarStyleDefault显示黑色内容。[……] UIStatusBarStyleLightContent显示灯光内容。当黑色内容位于状态栏
UIStatusBarStyle
常量指定状态栏内容是暗还是亮:
UIStatusBarStyleDefault
显示黑色内容。[……]
UIStatusBarStyleLightContent
显示灯光内容。当黑色内容位于状态栏后面时使用
也可能感兴趣的是:
在iOS 7中,您可以从单个vew控制器控制状态栏的样式,并在应用程序运行时进行更改。要选择此行为,请将
UIViewControllerBasedStatusBarAppearance
键添加到应用程序的Info.plist
文件中,并为其指定值YES
我绝对建议您浏览一下该文档,您也可以使用您的Apple开发者ID访问该文档
UIViewControllerBasedStatusBarAppearance设置为YES
viewdiload
中执行[self-setNeedsStatusBarAppearanceUpdate]代码>
- (UIStatusBarStyle)preferredStatusBarStyle
{
return UIStatusBarStyleLightContent;
}
UINavigationController
内部的控制器,请参阅:)
Swift 3-这将在UINavigationController
内的控制器中工作。在控制器中添加此代码
// Preferred status bar style lightContent to use on dark background.
// Swift 3
override var preferredStatusBarStyle: UIStatusBarStyle {
return .lightContent
}
#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];
}
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
}
}
Swift 5和SwiftUI
对于SwiftUI,创建一个名为HostingController.swift的新swift文件
import Foundation
import UIKit
import SwiftUI
class HostingController: UIHostingController<ContentView> {
override var preferredStatusBarStyle: UIStatusBarStyle {
return .lightContent
}
}
window.rootViewController = UIHostingController(rootView: ContentView())
到
或者,您可以选择退出基于视图控制器的状态栏外观:
在Info.plist
中,将查看基于控制器的状态栏外观设置为NO
调用[[UIApplication sharedApplication]setStatusBarStyle:UIStatusBarStyleLightContent]代码>
注意:此方法在iOS9中已被弃用。在UIViewController上使用preferredStatusBarStyle
。(请参阅)如果您有通过创建的嵌入式导航控制器,请确保在管理导航控制器的类中设置以下内容:
-(UIStatusBarStyle)preferredStatusBarStyle{
return UIStatusBarStyleLightContent;
}
这应该是您所需要的一切。您无需编写任何代码就可以做到这一点
执行以下操作,使状态栏文本在整个应用程序中变为白色
在您的项目plist上文件:
- 状态栏样式:
透明黑色样式(alpha为0.5)
- 查看基于控制器的状态栏外观:
NO
- 状态栏最初是隐藏的:
NO
对于我来说,使用其他答案(以及其他来源/文档)中的所有内容都没有发生任何问题。帮助的是在XIB中将导航栏样式设置为“黑色”。这将文本更改为白色,而没有任何代码
这适用于2013年9月18日发布的Golden Master iOS 7和Xcode 5 GM seed以及iOS7 SDK(至少在导航控制器隐藏的情况下):
将UIViewControllerBasedStatusBarAppearance中的设置为NO
Info.plist
在ViewDidLoad
方法或任何地方,您想在哪里更改
状态栏样式:
[[UIApplication sharedApplication]setStatusBarStyle:UIStatusBarStyleLightContent]代码>
已更新Xcode GM种子的答案:
在Info.plist
put中查看基于控制器的状态栏外观
asNO
在项目中,设置:
在ViewDidLoad中:
[[[self navigationController] navigationBar] setBarStyle:UIBarStyleBlackTranslucent];
[[UIApplication sharedApplication]setStatusBarStyle:UIStatusBarStyleLightContent]代码>
我做了一些不同的事情,这对我很有用
在代码中没有任何更改的情况下,我将.plist文件配置为:
- 查看基于控制器的状态栏外观>否
- 状态栏样式>UIStatusBarStyleLightContent(简单字符串)
我希望有帮助
编辑
对于每个视图控制器,我将情节提要中“状态栏”的模拟度量属性从“推断”更改为“轻内容”注意:大多数上浮答案不适用于iOS 7/8
在Info.plist中,将“基于视图控制器的状态栏外观”设置为否
在AppDelegate中添加
[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];
到
此解决方案适用于iOS 7/8如果您的UIViewController位于UINavigationController中,则必须设置BarStyle:
-[UINavigationBar setBarStyle:UIBarStyleBlack]
原来的答案在这里
无需额外操作,只需在viewController中编写此代码,并将状态栏颜色设置为白色即可
- (UIStatusBarStyle)preferredStatusBarStyle{return UIStatusBarStyleLightContent;}
简单的呼唤
[[UINavigationBar appearance] setBarStyle:UIBarStyleBlack];
在
-(BOOL)application:(UIApplication *)application
didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
}
我的AppDelegate
方法在iOS7中非常适合我。iOS 7允许各个视图控制器确定状态栏的外观,如Apple开发者文档所述:
iOS 7使视图控制器能够在应用程序运行时调整状态栏的样式。动态更改状态栏样式的一个好方法是实现preferredStatusBarStyle
,并在动画块内更新状态栏外观,并调用setNeedsStatusBarAppearanceUpdate
全局设置状态栏外观需要两个步骤
首先,您需要告诉iOS,您不希望逐个视图设置状态栏的外观
然后,您需要负责并实际设置新的全局状态栏样式
要禁用逐视图状态栏控件,需要设置Vi
[application setStatusBarHidden:NO];
[application setStatusBarStyle:UIStatusBarStyleLightContent];
#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];
}
[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions{
[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];
}
[[[self navigationController] navigationBar] setBarStyle:UIBarStyleBlackTranslucent];
navigationController?.navigationBar.barStyle = UIBarStyle.Black
UINavigationBar.appearance().barStyle = .BlackTranslucent
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
// Override point for customization after application launch.
UIApplication.shared.statusBarStyle = .lightContent
return true
}
override var preferredStatusBarStyle: UIStatusBarStyle {
return .lightContent
}
override func viewDidLoad() {
super.viewDidLoad()
self.setNeedsStatusBarAppearanceUpdate()
}
override var preferredStatusBarStyle: UIStatusBarStyle {
return .lightContent
}
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
}
}
override func viewDidAppear(_ animated: Bool) {
navigationController?.navigationBar.barStyle = .black
}
override var preferredStatusBarStyle: UIStatusBarStyle {
return .lightContent
}