Status Bar showing black text, only on iPhone 6 iO

2019-01-16 11:13发布

I'm trying to convert my iOS 7 app to iOS 8 in Xcode 6 GM, and when i run it on the iPhone 5s or lower simulators with iOS 8 everything is fine, but on the iPhone 6 and 6 Plus simulators, the Status Bar has black text instead of white like it is everywhere anytime else. I've set the Info.plist UIStatusBarStyle to "Transparent Black Style (alpha of 0.5)" thru Xcode, and that seems to have the desired effect everywhere else. Any ideas what is going on?

(I haven't touched any of the storyboards yet, could it be anything with that? I was hoping I could put that off for a while:)

14条回答
Luminary・发光体
2楼-- · 2019-01-16 11:31

A good fix for this is to use the new launch image nib support which gets used on the iPhone 6 models. It seems like there's just a bug in iOS 8 that means that the iPhone 6 models don't check the status bar style correctly when launching but it gets solved if you add in the launch nib.

As Aaron Wasserman pointed out you can also specify iPhone 6 & 6+ launch PNGs and that seems to fix the problem too, so long as you set them up right!

查看更多
够拽才男人
3楼-- · 2019-01-16 11:32

In your Storyboard select your root view controller and set status bar type default

查看更多
一夜七次
4楼-- · 2019-01-16 11:34

This bug only occurs if your app is being scaled to fit the resolution of the newer devices.

A quick fix (who knows whether this will even get addressed in 8.1) is to provide the proper resolution loading images in your app package.

From 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

In my app, we only support portrait, so providing the 750x1334 and 1242x2208 fixed it.

And just to confirm in case it wasn't obvious, you DO need to be using UIStatusBarStyleLightContent for your status bar style.

查看更多
狗以群分
5楼-- · 2019-01-16 11:35

I know it's bad style to override behaviour in a base class using a category, but this works and may be the quickest solution to fix it.

Step #1: Ensure UIViewControllerBasedStatusBarAppearance or View controller-based status bar appearance is set to YES in your application plist file.

Step #2: Add the following code to your project:

@implementation UIViewController (StatusBarColorFix)

- (UIStatusBarStyle) preferredStatusBarStyle {
    return UIStatusBarStyleLightContent;
}

@end
查看更多
甜甜的少女心
6楼-- · 2019-01-16 11:37

So here is how I fixed it

In PLIST View Controller Based Status Bar NO Status Bar Style UIStatusBarStyleLightContent

In AppDelegate DidFinishLaunching

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

In Each View Controller

- (UIStatusBarStyle) preferredStatusBarStyle {
    return UIStatusBarStyleLightContent;
}
查看更多
爱情/是我丢掉的垃圾
7楼-- · 2019-01-16 11:38
  1. Open Info.plist
  2. Add new property called "View controller-based status bar appearance" (Boolean) and set its value to "NO"
  3. Add new property called "Status bar style" (String) and set its value to "Opaque black style"

Done.

查看更多
登录 后发表回答