仅在iPhone 6 iOS 8模拟器上显示黑色文本的状态栏

我试图将我的iOS 7应用程序转换为Xcode 6 GM中的iOS 8,当我在iPhone 5s或更低版本的iOS 8上运行它时,一切正常,但是在iPhone 6和6 Plus模拟器上,状态栏有黑色的文字,而不是像任何时候随处可见的白色。 我已经通过Xcode将Info.plist的UIStatusBarStyle设置为“Transparent Black Style(alpha of 0.5)”,并且这似乎在其他地方都有所期望的效果。 任何想法是怎么回事?

(我还没有触及任何故事板,可能是什么呢?我希望我可以把这一段时间:)

如果您的应用正在缩放以适应新设备的分辨率,则只会出现此错误。

一个快速的解决scheme(谁知道这是否会得到解决8.1)是提供适当的解决scheme加载您的应用程序包中的图像。

https://developer.apple.com/ios/human-interface-guidelines/graphics/launch-screen/

For iPhone 7, iPhone 6s, iPhone 6: 750 x 1334 (@2x) for portrait 1334 x 750 (@2x) for landscape For iPhone 7 Plus, iPhone 6s Plus, iPhone 6 Plus: 1242 x 2208 (@3x) for portrait 2208 x 1242 (@3x) for landscape 

在我的应用程序,我们只支持肖像,所以提供了750×1334和1242×2208固定它。

只是为了确认,如果不是很明显,你需要为你的状态栏风格使用UIStatusBarStyleLightContent。

所以这里是我如何解决它

在基于PLIST视图控制器的状态栏中无状态栏样式UIStatusBarStyleLightContent

在AppDelegate DidFinishLaunching

 [UIApplication sharedApplication].statusBarStyle = UIStatusBarStyleLightContent; [self.window setBackgroundColor:[UIColor whiteColor]]; 

在每个视图控制器中

 - (UIStatusBarStyle) preferredStatusBarStyle { return UIStatusBarStyleLightContent; } 

我的应用程序状态栏在iOS 7中仅使用项目/目标设置正常工作:

 Status bar style = UIStatusBarStyleLightContent 

 View controller-based status bar appearance = NO 

但在iOS 8(iPhone 6和iPhone 6 Plus模拟器)状态栏没有显示出来。 将基于视图控制器的状态栏外观更改为YES,然后添加:

  // Objective C - (UIStatusBarStyle) preferredStatusBarStyle { return UIStatusBarStyleLightContent; } //Swift override func preferredStatusBarStyle() -> UIStatusBarStyle { return UIStatusBarStyle.LightContent } 

到ViewController导致再次看到白色的状态栏,但只有在初始根控制器启动后。 在初始启动期间,状态栏保持黑色。

一个类似的答案(目前已经被选为第二)已经发布,为了保持这个post是最新的,这里是Swift版本。

  1. 将一行添加到名为View controller-status bar appearance的 info.plist文件中,并将其布尔值设置为NO

  2. AppDelegate.swift文件中添加下面的方法: func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject : AnyObject]?) -> Bool { UIApplication.sharedApplication().statusBarStyle = .LightContent return true }

  3. 我不需要做这一步为了它的工作(即执行步骤1和2,它可能会工作)。 如果不是,请尝试将以下方法添加到每个ViewController

    override func preferredStatusBarStyle() -> UIStatusBarStyle { return UIStatusBarStyle.LightContent }

我希望这可以帮到你,

卢瓦克

  1. 打开Info.plist
  2. 添加名为“基于视图控制器的状态栏外观”(布尔)的新属性,并将其值设置为“否”
  3. 添加名为“状态栏风格”(String)的新属性,并将其值设置为“不透明黑色风格”

完成。

AppDelegatedidFinishLaunchingWithOptions:方法中添加以下行

 [[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleBlackOpaque animated:NO]; 

第1步:打开您的应用程序的info.plist文件,并将UIViewControllerBasedStatusBarAppearance设置为NO

第2步:你的应用程序的info.plist文件,并将“状态栏风格”设置为UIStatusBarStyleLightContent

可能是模拟器的问题。 使用它来覆盖特定视图控制器的默认状态栏或状态栏。

 override func preferredStatusBarStyle() -> UIStatusBarStyle { return UIStatusBarStyle.LightContent } //This is swift code 

我知道使用类别覆盖基类中的行为是不好的风格,但是这种方法可行,可能是最快的解决scheme。

步骤#1:确保你的应用程序plist文件中的UIViewControllerBasedStatusBarAppearanceView controller-based status bar appearance设置为YES

步骤#2:将下面的代码添加到您的项目中:

 @implementation UIViewController (StatusBarColorFix) - (UIStatusBarStyle) preferredStatusBarStyle { return UIStatusBarStyleLightContent; } @end 

一个很好的解决方法是使用在iPhone 6模型上使用的新的启动图像笔尖支持。 看起来好像只是在iOS 8中的错误,这意味着iPhone 6模型不启动时正确检查状态栏的风格,但如果你添加到启动笔尖,它会得到解决。

正如Aaron Wasserman指出的,你也可以指定iPhone 6&6+启动PNG,这似乎也解决了这个问题,只要你把它们设置正确!

在Storyboard中select你的根视图控制器,并设置状态栏types为default

我已经执行了以下步骤,他们为我工作得相当好,也应该在iOS 8 +工作。

1)在Info.plist中增加了属性视图控制器的状态栏外观 => NO
2)在- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions添加以下一段代码- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions AppDelegate.m的 - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions

  [UIApplication sharedApplication].statusBarStyle = UIStatusBarStyleLightContent; [self.window setBackgroundColor:[UIColor redColor]]; // Change color as per need. 

3)在ViewController覆盖方法

 - (UIStatusBarStyle) preferredStatusBarStyle { return UIStatusBarStyleLightContent; } 

适用于Swift 4和iOS 11

 func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool { application.statusBarStyle = .lightContent return true } 

这里是关于状态栏/文本颜色变化的Apple指南/说明 。

这里是 – 如何改变状态栏的风格:

如果你想设置状态栏风格,应用程序级别,然后在你的`.plist'文件中设置UIViewControllerBasedStatusBarAppearanceNO

或者通过编程的方式,你可以从应用程序代理:

 func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool { application.statusBarStyle = .lightContent return true } 

如果你想设置状态栏的风格,在视图控制器级别,然后按照下列步骤:

  1. 如果您只需要在UIViewController级别设置状态栏样式,请将.plist文件中的UIViewControllerBasedStatusBarAppearance设置为YES
  2. 在viewDidLoad添加函数 – setNeedsStatusBarAppearanceUpdate

  3. 在视图控制器中覆盖preferredStatusBarStyle。

 override func viewDidLoad() { super.viewDidLoad() self.setNeedsStatusBarAppearanceUpdate() } override var preferredStatusBarStyle: UIStatusBarStyle { return .lightContent } 

根据状态栏风格设置级别设置.plist的值。 在这里输入图像说明