我的应用程序具有深色背景,但是在iOS 7中状态栏变为透明的。所以我看不到任何东西,只有角落的绿色电池指示灯。如何将状态栏文本的颜色更改为白色,就像在主屏幕上一样?
我的应用程序具有深色背景,但是在iOS 7中状态栏变为透明的。所以我看不到任何东西,只有角落的绿色电池指示灯。如何将状态栏文本的颜色更改为白色,就像在主屏幕上一样?
Answers:
将UIViewControllerBasedStatusBarAppearance
要YES
在文件的.plist。
在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,创建一个新的swift文件,名为 HostingController.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())
或者,您可以选择不使用基于视图控制器的状态栏外观:
View controller-based status bar appearance
到NO
你Info.plist
。[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];
注意:此方法已在iOS9中弃用。请改用preferredStatusBarStyle
UIViewController。(请参阅Apple Developer Library)
您无需编写任何代码行就可以做到这一点!
执行以下操作,使整个应用程序中的状态栏文本变为白色
在您的项目plist文件上:
Transparent black style (alpha of 0.5)
NO
NO
UIStatusBarStyleLightContent
的plist info
但是,有Transparent Black
哪个会做同样的伎俩:)加上,你需要添加View controller-based status bar appearance
因为它不存在最初,它是所有你需要得到它的工作:)什么
<key>UIStatusBarStyle</key> <string>UIStatusBarStyleLightContent</string> <key>UIViewControllerBasedStatusBarAppearance</key> <false/>
注意:多数赞成的答案不适用于iOS 7/8
在Info.plist中,将“基于视图控制器的状态栏外观”设置为“否”
在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];
您不需要为此做任何代码
您需要在info.plist中添加“基于视图控制器的状态栏外观”键,如下所示:
&将其值类型设置为布尔值并将值设置为NO。然后单击项目设置,然后单击“常规”选项卡,然后在“部署信息”下将首选状态栏样式设置为.Light,如下所示:
而已。
只需执行以下两个步骤:
步骤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(至少隐藏了导航控制器):
设置the UIViewControllerBasedStatusBarAppearance
到NO
在
Info.plist
。
在ViewDidLoad
方法或任何位置中,要在何处更改状态栏样式:
[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];
如果您的UIViewController在UINavigationController内部,则必须设置BarStyle:
-[UINavigationBar setBarStyle:UIBarStyleBlack]
原始答案在这里
如果您具有通过Interface Builder创建的嵌入式导航控制器,请确保在管理导航控制器的类中设置以下内容:
-(UIStatusBarStyle)preferredStatusBarStyle{
return UIStatusBarStyleLightContent;
}
那应该是您所需要的。
只需在Appdelegate中
[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];
好吧,对我来说,这真的像小菜一碟。
转到您应用的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];
}
答对了。它为我工作。
在Swift 3中,仅需两个步骤就非常容易。转到您的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
}
此功能已在iOS9中弃用,现在您应该在rootviewcontroller中覆盖此属性
在iOS 9中已不建议这样做,请在rootviewcontroller上执行此操作
override var preferredStatusBarStyle: UIStatusBarStyle {
return .lightContent
}
iOS 7允许各个视图控制器确定状态栏的外观,如Apple开发人员文档所述:
iOS 7使视图控制器能够在应用程序运行时调整状态栏的样式。动态更改状态栏样式的一种好方法是
preferredStatusBarStyle
在动画块内实现并更新状态栏外观并调用setNeedsStatusBarAppearanceUpdate
。
全局设置状态栏外观是一个分为两个步骤的过程。
首先,您需要告诉iOS,您不想在逐个视图的基础上设置状态栏外观。
然后,您需要负责并实际设置新的全局状态栏样式。
要禁用逐视图状态栏控件,您需要View controller-based status bar appearance
在Info.plist
。
打开项目导航器,然后为您的iOS应用选择项目,然后选择“信息”选项卡。
将鼠标悬停在一行上,然后点击显示的加号,将新属性添加到您的 .plist
。
View controller-based status bar appearance
在“密钥”字段中输入,然后确保“类型”字段设置为Boolean
。最后输入NO
在“值”字段中。
要为状态栏设置全局样式,请在“信息”选项卡下添加另一个属性,键为Status bar style
,类型为String
,值为Opaque black style
。
这是一篇博客文章,其中包含更多细节和一些示例代码:
http://codebleep.com/setting-the-status-bar-text-color-in-ios-7/
无需执行任何其他操作,只需在viewController中编写此代码,然后将状态栏颜色设置为白色
- (UIStatusBarStyle)preferredStatusBarStyle{return UIStatusBarStyleLightContent;}
我认为所有答案并没有真正指出问题所在,因为它们都在特定情况下起作用。但是,如果您需要涵盖所有情况,请遵循以下几点:
根据需要在何处使用状态栏灯样式,应始终牢记以下三点:
1)如果需要在启动屏幕或其他地方无法控制它的状态栏(不是在视图控制器中,而是在某些系统控制的元素/瞬间,如启动屏幕), 请转到项目设置
2)如果导航控制器内有一个控制器,则 可以在界面构建器中进行如下更改:
b)然后将导航栏的样式设置为“黑色”,因为这意味着您在状态栏下将有一个“黑色”->深色背景,因此它将状态栏设置为白色
或按以下代码执行
navigationController?.navigationBar.barStyle = UIBarStyle.Black
3)如果仅控制器需要具有自己的状态栏样式,并且不作为UINavigationController嵌入在某些容器结构中
在代码中为控制器设置状态栏样式:
只需致电
[[UINavigationBar appearance] setBarStyle:UIBarStyleBlack];
在里面
-(BOOL)application:(UIApplication *)application
didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
}
AppDelegate
在iOS7中,我的工作方法非常适合我。
View controller-based status bar appearance = NO
这在《iOS 7 UI过渡指南》中有所记录,您需要Apple开发人员ID才能直接访问。相关摘录:
由于状态栏是透明的,因此它后面的视图将显示出来。[...]使用一个
UIStatusBarStyle
常量来指定状态栏内容是暗还是亮:
UIStatusBarStyleDefault
显示暗色内容。[...]
UIStatusBarStyleLightContent
显示灯光内容。当状态栏后面有深色内容时使用。
也可能感兴趣:
在iOS 7中,您可以从单个vew控制器控制状态栏的样式,并在应用运行时对其进行更改。要选择这种行为,请将
UIViewControllerBasedStatusBarAppearance
密钥添加到应用程序的Info.plist
文件中并为其指定值YES
。
我绝对建议您浏览一下该文档,同样,您可以使用Apple开发人员ID进行访问。
这是有关状态栏更改的Apple准则/说明。状态栏中仅允许使用深色和浅色(白色和黑色)。
这是-如何更改状态栏样式:
如果要设置状态栏样式,则在“ .plist”文件中将应用程序级别设置UIViewControllerBasedStatusBarAppearance
为NO
。
如果要设置状态栏样式,请在视图控制器级别执行以下步骤:
UIViewControllerBasedStatusBarAppearance
到YES
中.plist
文件,如果需要设置状态栏样式仅UIViewController的水平。在viewDidLoad中添加功能- setNeedsStatusBarAppearanceUpdate
在视图控制器中重写preferredStatusBarStyle。
--
override func viewDidLoad() {
super.viewDidLoad()
self.setNeedsStatusBarAppearanceUpdate()
}
override var preferredStatusBarStyle: UIStatusBarStyle {
return .lightContent
}
根据状态栏样式设置级别设置.plist的值。
这是一些技巧,可以在应用程序启动或视图控制器的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
}
}
结果如下:
我做了一些不同的事情,对我有用。
无需更改代码,就可以像下面这样配置.plist文件:
希望对您有所帮助。
对于每个视图控制器,我将情节提要中的“状态栏”的“模拟度量”属性从“推断”更改为“轻内容”
如果仍要View controller-based status bar appearance
在info.plist中使用设置为YES的情况,这意味着您可以更改每个视图控制器的状态栏,请对ViewDidLoad的状态栏中的白色文本使用以下内容:
[[[self navigationController] navigationBar] setBarStyle:UIBarStyleBlackTranslucent];
让我给您一个完整的答案。更改状态栏文本颜色非常容易,但是在iOS 7中,特别是对于新手来说,这有点令人困惑。
如果您试图通过选择视图控制器并转到右侧的“模拟度量”,将情节提要中的颜色从黑色更改为白色,它将无法正常工作,我也不知道为什么。它应该通过这样的更改来工作,但是无论如何都可以。
其次,您不会在plist中找到UIViewControllerBasedStatusBarAppearance属性,但默认情况下不存在。您必须通过单击+按钮将其自己添加,然后将其设置为NO。
iOS 7状态栏文字颜色
最后,您必须转到AppDelegate.m文件,并在didFinishLaunchingWithOptions方法中添加以下内容,并添加以下行:
[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];
这会将所有视图控制器的颜色更改为白色。希望这可以帮助!