45

我正在尝试在 Xcode 6 GM 中将我的 iOS 7 应用程序转换为 iOS 8,当我在 iPhone 5s 或更低版本的 iOS 8 模拟器上运行它时,一切都很好,但在 iPhone 6 和 6 Plus 模拟器上,状态栏有黑色文本而不是白色,就像它在其他任何时候一样无处不在。我已经通过 Xcode 将 Info.plist UIStatusBarStyle 设置为“透明黑色样式(0.5 的 alpha)”,这似乎在其他任何地方都有预期的效果。有什么想法吗?

(我还没有触及任何情节提要,有什么关系吗?我希望我能把它推迟一段时间:)

4

14 回答 14

50

所以这就是我修复它的方法

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

在 AppDelegate DidFinishLaunching

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

在每个视图控制器中

- (UIStatusBarStyle) preferredStatusBarStyle {
    return UIStatusBarStyleLightContent;
}
于 2014-09-22T17:50:48.947 回答
42

仅当您的应用程序被缩放以适应较新设备的分辨率时,才会出现此错误。

一个快速修复(谁知道这是否会在 8.1 中得到解决)是在您的应用程序包中提供正确的分辨率加载图像。

来自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

在我的应用程序中,我们只支持纵向,因此提供 750x1334 和 1242x2208 修复了它。

并且只是为了确认以防它不明显,您需要使用 UIStatusBarStyleLightContent 作为您的状态栏样式。

于 2014-09-23T02:09:41.397 回答
16

我的应用程序的状态栏在 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 导致再次看到白色状态栏,但仅在初始根控制器启动之后。在初始启动期间,状态栏保持黑色。

于 2014-09-19T15:31:29.070 回答
15

已经发布了一个类似的答案(目前投票为第 2 个),为了保持这篇文章的最新状态,请购买,这里是Swift版本。

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

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

  3. 我不需要执行此步骤即可使其正常工作(即执行步骤 1 和 2,它可能会起作用)。如果没有,请尝试将以下方法添加到您的每个ViewControllers

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

我希望这可以帮到你,

洛伊克

于 2014-12-18T10:36:29.950 回答
7
  1. 打开 Info.plist
  2. 添加名为“基于控制器的状态栏外观”的新属性(布尔值)并将其值设置为“否”
  3. 添加名为“状态栏样式”(字符串)的新属性并将其值设置为“不透明黑色样式”

完毕。

于 2015-08-10T12:51:46.053 回答
6

AppDelegate在'sdidFinishLaunchingWithOptions:方法中添加以下行

[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleBlackOpaque animated:NO];
于 2014-09-26T11:55:09.250 回答
6

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

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

于 2015-05-18T15:01:49.760 回答
3

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

override func preferredStatusBarStyle() -> UIStatusBarStyle {
    return UIStatusBarStyle.LightContent
} //This is swift code
于 2014-09-16T13:05:49.390 回答
2

我知道使用类别覆盖基类中的行为是一种不好的风格,但这很有效,并且可能是修复它的最快解决方案。

步骤#1:确保UIViewControllerBasedStatusBarAppearance或在您的应用程序 plist 文件View controller-based status bar appearance中设置为。YES

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

@implementation UIViewController (StatusBarColorFix)

- (UIStatusBarStyle) preferredStatusBarStyle {
    return UIStatusBarStyleLightContent;
}

@end
于 2014-10-06T13:59:35.927 回答
1

一个很好的解决方法是使用 iPhone 6 机型上使用的新启动图像笔尖支持。似乎 iOS 8 中只有一个错误,这意味着 iPhone 6 型号在启动时没有正确检查状态栏样式,但如果您添加启动笔尖,它就会得到解决。

正如 Aaron Wasserman 指出的那样,您还可以指定 iPhone 6 和 6+ 启动 PNG,这似乎也可以解决问题,只要您正确设置它们!

于 2014-10-10T13:31:15.003 回答
1

这是关于状态栏/文本颜色更改的Apple 指南/说明。

这是 - 如何更改状态栏样式:

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

或者您可以通过 App Delegate 以编程方式进行操作:

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

如果您想在视图控制器级别设置状态栏样式,请按照以下步骤操作:

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

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

-

override func viewDidLoad() {
    super.viewDidLoad()
    self.setNeedsStatusBarAppearanceUpdate()
}

override var preferredStatusBarStyle: UIStatusBarStyle {
    return .lightContent
}

根据状态栏样式设置级别设置 .plist 的值。 在此处输入图像描述

于 2017-10-27T11:32:43.400 回答
0

在您的 Storyboard 中选择您的根视图控制器并设置状态栏类型默认值

于 2014-12-16T04:36:53.307 回答
0

我已经执行了以下步骤,它们对我来说工作得很好,应该也可以在 iOS 8+ 中工作。

1)在 Info.plist 中添加了基于视图控制器的状态栏外观属性=> NO 。2)在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;
}
于 2017-02-27T06:44:37.557 回答
0

适用于 Swift 4 和 iOS 11

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
    application.statusBarStyle = .lightContent
    return true
}
于 2017-10-27T11:15:34.810 回答