仅在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版本。
-
将一行添加到名为View controller-status bar appearance的 info.plist文件中,并将其布尔值设置为NO 。
-
在AppDelegate.swift文件中添加下面的方法:
func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject : AnyObject]?) -> Bool { UIApplication.sharedApplication().statusBarStyle = .LightContent return true }
-
我不需要做这一步为了它的工作(即执行步骤1和2,它可能会工作)。 如果不是,请尝试将以下方法添加到每个ViewController :
override func preferredStatusBarStyle() -> UIStatusBarStyle { return UIStatusBarStyle.LightContent }
我希望这可以帮到你,
卢瓦克
- 打开Info.plist
- 添加名为“基于视图控制器的状态栏外观”(布尔)的新属性,并将其值设置为“否”
- 添加名为“状态栏风格”(String)的新属性,并将其值设置为“不透明黑色风格”
完成。
在AppDelegate
的didFinishLaunchingWithOptions:
方法中添加以下行
[[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文件中的UIViewControllerBasedStatusBarAppearance
或View 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'文件中设置UIViewControllerBasedStatusBarAppearance
为NO
。
或者通过编程的方式,你可以从应用程序代理:
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool { application.statusBarStyle = .lightContent return true }
如果你想设置状态栏的风格,在视图控制器级别,然后按照下列步骤:
- 如果您只需要在UIViewController级别设置状态栏样式,请将
.plist
文件中的UIViewControllerBasedStatusBarAppearance
设置为YES
。 -
在viewDidLoad添加函数 –
setNeedsStatusBarAppearanceUpdate
-
在视图控制器中覆盖preferredStatusBarStyle。
–
override func viewDidLoad() { super.viewDidLoad() self.setNeedsStatusBarAppearanceUpdate() } override var preferredStatusBarStyle: UIStatusBarStyle { return .lightContent }
根据状态栏风格设置级别设置.plist的值。