繁体   English   中英

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

[英]Status Bar showing black text, only on iPhone 6 iOS 8 simulator

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

(我还没有触及任何故事板,它可能是什么东西吗?我希望我能把它关掉一段时间:)

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

在PLIST中查看基于控制器的状态栏否状态栏样式UIStatusBarStyleLightContent

在AppDelegate中DidFinishLaunching

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

在每个视图控制器中

- (UIStatusBarStyle) preferredStatusBarStyle {
    return UIStatusBarStyleLightContent;
}

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

快速修复(谁知道这是否会在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作为状态栏样式。

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

一个类似的答案(目前被评为第二名)已经发布,为了保持这篇文章的最新信息而购买,这里是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 }

我希望这可以帮到你,

卢瓦克

  1. 打开Info.plist
  2. 添加名为“View controller-based status bar appearance”(布尔值)的新属性,并将其值设置为“NO”
  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

我知道使用类别覆盖基类中的行为是不好的方式,但这可行并且可能是解决它的最快解决方案。

步骤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中选择根视图控制器并将状态栏类型设置为default

我已经执行了以下步骤,它们对我很有用,也应该在iOS 8+中工作。

1)添加属性在Info.plist中查看基于控制器的状态栏外观 =>
2)加入下列中的一段代码- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions AppDelegate.m

    [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

或者以编程方式,您可以从App Delegate:

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的值。 在此输入图像描述

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM