我的应用程序有深色背景,但在 iOS 7 中,状态栏变得透明。所以我在那里什么都看不到,只有角落里的绿色电池指示灯。如何将状态栏文本颜色更改为白色,就像在主屏幕上一样?
在 .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
}
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 中将基于视图控制器的状态栏外观设置为 NO。调用 [[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];
注意:此方法在 iOS9 中已被弃用。改为在 UIViewController 上使用 preferredStatusBarStyle
。 (见Apple Developer Library)
您无需编写任何代码即可做到这一点!执行以下操作以使整个应用程序的状态栏文本颜色为白色
在您的项目 plist 文件中:
状态栏样式:透明黑色样式(alpha of 0.5)
查看基于控制器的状态栏外观:否
状态栏最初是隐藏的:否
plist info
中没有任何名为 UIStatusBarStyleLightContent
的东西,但是有 Transparent Black
可以做同样的事情 :) 另外,您需要添加 View controller-based status bar appearance
,因为它最初不存在,这就是您需要得到的全部它工作:)
<key>UIStatusBarStyle</key> <string>UIStatusBarStyleLightContent</string> <key>UIViewControllerBasedStatusBarAppearance</key> <false/>
注意:最受好评的答案不适用于 iOS 7 / 8
在 Info.plist 中将“查看基于控制器的状态栏外观”设置为 NO
在 AppDelegate 添加
[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];
至
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions{
...
}
此解决方案适用于 iOS 7 / 8。
对我来说,使用其他答案(以及其他来源/文档)中的所有东西都没有发生任何事情。有帮助的是在 XIB 中将导航栏样式设置为“黑色”。这将文本更改为白色,根本没有任何代码。
https://i.stack.imgur.com/NfOK6.png
这些都不适合我,所以这是一个可行的解决方案......
在 Info.plist
中,添加一行:
UIViewControllerBasedStatusBarAppearance
,并设置值 NO
。
然后在 didFinishLaunchingWithOptions
的 AppDelegate 中,添加以下行:
[application setStatusBarHidden:NO];
[application setStatusBarStyle:UIStatusBarStyleLightContent];
你不需要为此做任何代码
https://i.stack.imgur.com/wmTmN.png
& 将其值类型设置为 Boolean & 值设置为 NO。然后单击项目设置,然后单击常规选项卡并在部署信息下将首选状态栏样式设置为.Light,如下所示:
https://i.stack.imgur.com/9FLkn.png
而已。
只需以下两步:
步骤1:
在 project target
的信息选项卡下,添加行:
UIViewControllerBasedStatusBarAppearance
,设置值 NO
。
第2步:
在项目 AppDelegate.m
中:
- (BOOL)application:(UIApplication *)application
didFinishLaunchingWithOptions:(NSDictionary *)launchOptions{
…
[application setStatusBarStyle:UIStatusBarStyleLightContent];
…
}
这适用于 2013 年 9 月 18 日发布的 Golden Master iOS 7 和 Xcode 5 GM 种子和 iOS7 SDK(至少隐藏导航控制器):
在 Info.plist 中将 UIViewControllerBasedStatusBarAppearance 设置为 NO。在 ViewDidLoad 方法或任何地方,你想在哪里更改状态栏样式: [[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];
如果您的 UIViewController 在 UINavigationController 中,您将必须设置 BarStyle:
-[UINavigationBar setBarStyle:UIBarStyleBlack]
原始答案在这里
https://devforums.apple.com/message/844264#844264
如果您有通过 Interface Builder 创建的嵌入式导航控制器,请务必在管理您的导航控制器的类中设置以下内容:
-(UIStatusBarStyle)preferredStatusBarStyle{
return UIStatusBarStyleLightContent;
}
这应该就是你所需要的。
转到项目-> 目标,然后将状态栏样式设置为浅色。它使启动屏幕上的状态栏变为白色。然后在 Info.plist 中将基于 View controller 的状态栏外观设置为 NO。
View controller-based status bar appearance equal
设置为 NO
的第二部分是我缺少的部分。谢谢
https://i.stack.imgur.com/u4vyC.png
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
// Override point for customization after application launch.
UIApplication.shared.statusBarStyle = .lightContent
return true
}
这在 iOS9 中已被弃用,现在您应该在 rootviewcontroller 中覆盖此属性
这样做在 iOS 9 中已被弃用,应该在 rootviewcontroller 上这样做
override var preferredStatusBarStyle: UIStatusBarStyle {
return .lightContent
}
在 AppDelegate.m 中,添加以下内容。
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions{
[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];
}
并在 Plist 文件中,将“基于控制器的状态栏外观”设置为 NO。
简单地在应用程序代理中:
[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];
在 Swift 5 中,请按照以下步骤操作:
在 Info.plist 中添加键 UIViewControllerBasedStatusBarAppearance 并将值设置为 false 添加键 UIStatusBarStyle 并将值设置为 UIStatusBarStyleLightContent
嗯,这对我来说真的很像小菜一碟。
转到您应用的 info.plist
。
将基于视图控制器的状态栏外观设置为 NO 将状态栏样式设置为 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];
}
答对了。它对我有用。
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/
为 Xcode GM Seed 更新的答案:
在 Info.plist 中将基于 View controller 的状态栏外观设置为 NO 在项目中,设置: In ViewDidLoad: [[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];
Xcode 似乎不断地改变这一点,所以这是最新的。
截至 2021 年 - Swift 5、Xcode 12
要将状态栏更改为白色:
打开你的 Info.plist。添加键 UIViewControllerBasedStatusBarAppearance 并将值设置为 No (false)。人类可读的版本是“基于视图控制器的状态栏外观”。添加键 UIStatusBarStyle 并将值设置为 UIStatusBarStyleLightContent(即“Light Content”)。
不需要做一些额外的事情,只需在你的 viewController 中编写这段代码并获得状态栏颜色为白色
- (UIStatusBarStyle)preferredStatusBarStyle{return UIStatusBarStyleLightContent;}
我认为所有答案都没有真正指出问题所在,因为它们都适用于特定场景。但是,如果您需要涵盖所有情况,请遵循以下几点:
根据您需要状态栏灯样式的位置,您应该始终牢记以下 3 点:
https://i.stack.imgur.com/lZtBI.png
2)如果您在导航控制器中有一个控制器您可以在界面构建器中更改它,如下所示:
https://i.stack.imgur.com/5kKP5.png
b)然后将导航栏的样式设置为“黑色”,因为这意味着您的状态栏下会有一个“黑色” -> 深色背景,所以它将状态栏设置为白色
https://i.stack.imgur.com/Dp7xF.png
或者在代码中执行如下
navigationController?.navigationBar.barStyle = UIBarStyle.Black
3)如果您只有控制器需要拥有自己的状态栏样式,并且它没有作为 UINavigationController 嵌入到某些容器结构中
在代码中为控制器设置状态栏样式:
https://i.stack.imgur.com/no246.png
以下是关于状态栏更改的Apple Guidelines/Instruction。只有黑暗与状态栏中允许使用亮光(而 & 黑色)。
这是 - 如何更改状态栏样式:
如果要设置状态栏样式、应用程序级别,则在“.plist”文件中将 UIViewControllerBasedStatusBarAppearance
设置为 NO
。
如果您想在视图控制器级别设置状态栏样式,请按照以下步骤操作:
如果您只需要在 UIViewController 级别设置状态栏样式,请在 .plist 文件中将 UIViewControllerBasedStatusBarAppearance 设置为 YES。在 viewDidLoad 添加函数 - setNeedsStatusBarAppearanceUpdate 覆盖视图控制器中的 preferredStatusBarStyle。
-
override func viewDidLoad() {
super.viewDidLoad()
self.setNeedsStatusBarAppearanceUpdate()
}
override var preferredStatusBarStyle: UIStatusBarStyle {
return .lightContent
}
https://i.stack.imgur.com/8sH5i.png
这是在应用程序启动期间或视图控制器的 viewDidLoad 期间更改/设置状态栏背景颜色的一些技巧。
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
}
}
这是结果:
https://i.stack.imgur.com/LKppl.png
只需调用
[[UINavigationBar appearance] setBarStyle:UIBarStyleBlack];
在里面
-(BOOL)application:(UIApplication *)application
didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
}
我的 AppDelegate
方法在 iOS7 中非常适合我。
View controller-based status bar appearance = NO
的 iOS 9 中为我工作
这在 iOS 7 UI Transition Guide 中有记录,您需要 Apple 开发者 ID 才能直接访问。相关摘录:
因为状态栏是透明的,所以它后面的视图就透出来了。 [...] 使用 UIStatusBarStyle 常量来指定状态栏内容是深色还是浅色:UIStatusBarStyleDefault 显示深色内容。 [...] UIStatusBarStyleLightContent 显示浅色内容。当深色内容位于状态栏后面时使用。
也可能感兴趣:
在 iOS 7 中,您可以从单个 vew 控制器控制状态栏的样式,并在应用程序运行时更改它。要选择启用此行为,请将 UIViewControllerBasedStatusBarAppearance 键添加到应用程序的 Info.plist 文件中,并将其设置为 YES。
我绝对建议您查看文档,再次,您可以使用您的 Apple 开发人员 ID 访问该文档。
对于 Swift 5,我添加了以下几行:
override func viewDidAppear(_ animated: Bool) {
navigationController?.navigationBar.barStyle = .black
}
override var preferredStatusBarStyle: UIStatusBarStyle {
return .lightContent
}
我做了一些不同的事情,它对我有用。
在没有更改代码的情况下,我确实像这样配置了我的 .plist 文件:
查看基于控制器的状态栏外观 > 否
状态栏样式 > UIStatusBarStyleLightContent(简单字符串)
我希望它有所帮助。
编辑
对于每个视图控制器,我将情节提要中的“状态栏”的模拟指标属性从“推断”更改为“轻量内容”
在 info.plist 中设置字段值 NO 查看基于控制器的状态栏外观并在目标 > 常规设置中设置状态栏样式灯。
如果你想用 Swift 得到同样的结果,你可以在你的 AppDelegate.swift 文件中使用这个代码:
UINavigationBar.appearance().barStyle = .BlackTranslucent
并且您的状态栏的文本将是白色的 :-) !
总结一下,编辑您的项目 Info.plist
并添加:
View controller-based status bar appearance
:NO
Status bar style
:Opaque black style
或者如果您有原始键/值 plist
UIViewControllerBasedStatusBarAppearance
:NO
UIStatusBarStyle
:Opaque black style
preferredStatusBarStyle
麻烦少,因为您可以全局配置它(当然,这只对您的情况有用)