iPhone 6 状态栏颜色

23

有人注意到iPhone 6模拟器的状态栏颜色没有使用正确的样式吗?

我将UIStatusBarStyle设置为UIStatusBarStyleLightContentUIViewControllerBasedStatusBarAppearance设置为NO。在iOS8上,所有手机都可以正常工作,除了6和6 Plus。在我的appDelegate中,我可以使用UIApplication.sharedApplication().setStatusBarStyle(.LightContent, animated: false)来设置它,但这并不适用于启动屏幕。当我想要浅色内容时,它仍然想要暗色。有人有解决方法吗?我需要在plist中添加新项吗?


2
遇到了同样的问题,不知道是模拟器的 bug 还是其他什么原因? - JeffN
我觉得这似乎是模拟器的问题。 - db42
2
我也有同样的问题,但只在启动时。一旦视图加载完成,它就会变成白色。 - Jordan Brown
我也遇到了一个问题,即在实际设备(iPhone 6)上启动时出现样式不正确的问题(当视图加载时会纠正)。目前,该应用程序正在使用iOS 7 SDK和Xcode 5.1.1。(在跳转到iOS 8 SDK之前做最后的iOS 6兼容版本发布)。 - ianthetechie
4个回答

15

一种选择是在plist文件中将UIViewControllerBasedStatusBarAppearance设置为YES,然后在每个视图控制器中使用此方法。

- (UIStatusBarStyle) preferredStatusBarStyle {
    return UIStatusBarStyleLightContent;
}

做这件事很麻烦,而且绝不是最好的解决方案。目前来看,这个方法可以在我所有的视图控制器上运行,但有一个例外,对于这个例外,我还在寻找另一种替代方案。

编辑

找到了更好的解决方案。在plist中将UIViewControllerBasedStatusBarAppearance保持为NO,并将Status bar style设置为UIStatusBarStyleLightContent,然后通过从图像资源中选择+ -> New Launch Image添加正确的启动图像。这将防止iPhone 6/6+将应用程序放大到屏幕尺寸并显示亮色状态栏。正确的屏幕尺寸如下:

iPhone 4/4S: 640x960 px
iPhone 5/5S: 640x1136 px
iPhone 6:    750x1334 px (edited)
iPhone 6+:   1242x2208 px

我不能为此负责,只能作证这个方法有效。这里是我找到解决方案的地方:https://dev59.com/H18e5IYBdhLWcg3wTJGL#25985800http://beageek.biz/how-to-create-launch-images-app-xcode-ios/


在我的情况下,我不得不在我的故事板中对UINavigationControllers进行子类化,并在那里放置preferredStatusBarStyle方法。将其放在导航控制器中没有任何作用。 - Erik Villegas
首先,@pfryerda提供的解决方案解决了我的问题,并且并不需要太多额外的工作。 - MartinR

7
我遇到了同样的问题,并解决了它。
- (void)viewDidLoad {
    [super viewDidLoad];
    [self setNeedsStatusBarAppearanceUpdate];
}

-(UIStatusBarStyle)preferredStatusBarStyle{
    return UIStatusBarStyleLightContent;
}

我很懒,所以我创建了一个控制器来添加它,并让所有其他控制器继承它。


1

我也在此帖回复中提到过这一点,但我找到的唯一解决方法是将您的应用程序转换为使用iPhone 6和6+资源。

一旦您在资产管理器中提供了正确大小的启动画面资源,您的应用程序将尊重您的状态栏样式设置。

来自https://developer.apple.com/library/iOS/documentation/userexperience/conceptual/mobilehig/LaunchImages.html

For iPhone 6:

750 x 1334 (@2x) for portrait
1334 x 750 (@2x) for landscape

For iPhone 6 Plus:

1242 x 2208 (@3x) for portrait
2208 x 1242 (@3x) for landscape

您还应该仔细检查是否将状态栏样式设置为UIStatusBarStyleLightContent。 这可以通过以下两种方式完成:

  • 在应用程序的info.plist中设置UIStatusBarStyle = UIStatusBarStyleLightContent
  • 在项目中所有适用的UIViewController中覆盖preferredStatusBarStyle:方法。 (对于此选项,请确保在应用程序的info.plist中设置了UIViewControllerBasedStatusBarAppearance = YES)

0

pfryerda的答案是正确的,启动图像是解决问题的方法。我甚至不知道就解决了我的问题。我使用了General Info选项卡中的新Launch Screen File部分,并将我的启动屏幕设置为自己独立的storyboard。在storyboard中,我创建了一个视图,该视图调整大小以全屏显示,因此我不再有这个问题,因为启动屏幕始终是正确的尺寸。

简要回顾如何创建启动屏幕storyboard:

  1. 创建一个名为LaunchScreen.storyboard的空白storyboard文件。

  2. 转到目标设置,在General选项卡上,将storyboard选择为您的Launch Screen File。Xcode将向您的应用程序的Info.plist添加相应的UILaunchStoryboardName键。当存在此键时,Xcode将优先考虑它,而不是您可能设置的任何启动图像。

  3. 向storyboard添加一个视图控制器场景。添加一些子视图到场景中,并使用约束将它们定位。当您在设备上启动应用程序时,操作系统应该使用该场景作为启动屏幕。

您可以在这里了解更多信息:http://oleb.net/blog/2014/08/replacing-launch-images-with-storyboards/


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接