Строка состояния с черным текстом, только на iPhone 6 iOS 8

Я пытаюсь преобразовать свое приложение iOS 7 в iOS 8 в Xcode 6 GM, и когда я запускаю его на iPhone 5s или более низких симуляторах с iOS 8, все в порядке, но на симуляторах iPhone 6 и 6 Plus отображается строка состояния. имеет черный текст вместо белого, как это везде и всегда. Я установил для Info.plist UIStatusBarStyle значение "Прозрачный черный стиль (альфа из 0,5)" через XCode, и это, кажется, дает желаемый эффект везде. Есть идеи, что происходит?

(Я еще не коснулся ни одной из раскадровок, может ли это быть что-то с этим? Я надеялся, что смогу отложить это на некоторое время:)

14 ответов

Решение

Эта ошибка возникает, только если ваше приложение масштабируется в соответствии с разрешением новых устройств.

Быстрое решение (кто знает, будет ли это исправлено в 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 для вашего стиля строки состояния.

Так вот как я это исправил

В PLIST View Строка состояния на основе контроллера НЕТ Стиль строки состояния 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) строка состояния не отображалась. Измените вид строки состояния View на основе контроллера на YES, а затем добавьте:

    // Objective C
    - (UIStatusBarStyle) preferredStatusBarStyle {
         return UIStatusBarStyleLightContent;
    }
    //Swift
    override func preferredStatusBarStyle() -> UIStatusBarStyle {
    return UIStatusBarStyle.LightContent
    }

В результате ViewController снова увидел белую строку состояния, но только после запуска исходного корневого контроллера. Во время первоначального запуска строка состояния остается черной.

Аналогичный ответ (в настоящее время проголосовал за 2-й) уже опубликован, но в интересах поддержания этого поста в актуальном состоянии, вот версия Swift.

  1. Добавьте строку в ваш файл info.plist с именем View-based основанная на контроллере строка состояния и установите для ее логического значения значение 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. Добавьте новое свойство "Просмотр внешнего вида строки состояния на основе контроллера" (Boolean) и установите для него значение "NO".
  3. Добавьте новое свойство с именем "Стиль строки состояния" (String) и установите для него значение "Непрозрачный черный стиль".

Готово.

Добавьте следующую строку в AppDelegate"s 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

Я знаю, что это плохой стиль - переопределять поведение в базовом классе с помощью категории, но это работает и, возможно, является самым быстрым решением для его исправления.

Шаг № 1: Убедитесь, что UIViewControllerBasedStatusBarAppearance или же View controller-based status bar appearance установлен в YES в вашем приложении plist файл.

Шаг № 2: Добавьте следующий код в ваш проект:

@implementation UIViewController (StatusBarColorFix)

- (UIStatusBarStyle) preferredStatusBarStyle {
    return UIStatusBarStyleLightContent;
}

@end

Хорошим решением для этого является использование новой поддержки пера образа запуска, которая используется на моделях iPhone 6. Кажется, что в iOS 8 есть только ошибка, которая означает, что модели iPhone 6 не проверяют стиль строки состояния при запуске правильно, но это решается, если вы добавляете в пуск запуска.

Как отметил Аарон Вассерман, вы также можете указать PNG для iPhone 6 и 6+, и это, похоже, тоже решит проблему, если вы правильно их настроите!

Вот Apple Guidelines/Instruction для строки состояния / изменения цвета текста.

Вот - Как изменить стиль строки состояния:

Если вы хотите установить стиль строки состояния, уровень приложения, затем установите UIViewControllerBasedStatusBarAppearance в NO в вашем файле.plist.

Или программно вы можете сделать из App Delegate:

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

если вы хотите установить стиль строки состояния, на уровне контроллера представления выполните следующие действия:

  1. Установить UIViewControllerBasedStatusBarAppearance в YES в .plist файл, если вам нужно установить стиль строки состояния только на уровне UIViewController.
  2. В viewDidLoad добавить функцию - setNeedsStatusBarAppearanceUpdate

  3. переопределить предпочитаемый StatusBarStyle в вашем контроллере представления.

-

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

override var preferredStatusBarStyle: UIStatusBarStyle {
    return .lightContent
}

Установите значение.plist в соответствии с уровнем настройки стиля строки состояния.

В вашей раскадровке выберите корневой контроллер и установите тип строки состояния по умолчанию

Для Swift 4 и iOS 11

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

Я выполнил следующие шаги, и они работали для меня довольно хорошо, должны работать и в 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;
}
Другие вопросы по тегам