Строка состояния с черным текстом, только на 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.
Добавьте строку в ваш файл info.plist с именем View-based основанная на контроллере строка состояния и установите для ее логического значения значение NO.
В файле AppDelegate.swift добавьте следующий метод:
func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject : AnyObject]?) -> Bool { UIApplication.sharedApplication().statusBarStyle = .LightContent return true }
Мне не нужно было делать этот шаг для того, чтобы он работал (т.е. сделать шаги 1 и 2, и он может работать). Если нет, попробуйте добавить следующий метод для каждого из ваших ViewControllers:
override func preferredStatusBarStyle() -> UIStatusBarStyle { return UIStatusBarStyle.LightContent }
Я надеюсь, что это было полезно,
Лоик
- Открыть Info.plist
- Добавьте новое свойство "Просмотр внешнего вида строки состояния на основе контроллера" (Boolean) и установите для него значение "NO".
- Добавьте новое свойство с именем "Стиль строки состояния" (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
}
если вы хотите установить стиль строки состояния, на уровне контроллера представления выполните следующие действия:
- Установить
UIViewControllerBasedStatusBarAppearance
вYES
в.plist
файл, если вам нужно установить стиль строки состояния только на уровне UIViewController. В viewDidLoad добавить функцию -
setNeedsStatusBarAppearanceUpdate
переопределить предпочитаемый 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;
}