Мое приложение имеет темный фон, но в iOS 7 панель состояния стала прозрачной. Поэтому я ничего не вижу, только зеленый индикатор батареи в углу. Как изменить цвет текста строки состояния на белый, как на главном экране?
Как изменить цвет текста строки состояния в iOS
Ответ 1
-  Установите для UIViewControllerBasedStatusBarAppearanceзначениеYESв файле .plist.
-  В viewDidLoadсделайте[self setNeedsStatusBarAppearanceUpdate];
-  Добавьте следующий метод: - (UIStatusBarStyle)preferredStatusBarStyle { return UIStatusBarStyleLightContent; }
 Примечание: это не работает для контроллеров внутри UINavigationController, см. Комментарий Тайсона ниже :)
 Swift 3 - это будет работать контроллеры внутри UINavigationController. Добавьте этот код в свой контроллер.
// Preferred status bar style lightContent to use on dark background.
// Swift 3
override var preferredStatusBarStyle: UIStatusBarStyle {
    return .lightContent
}
Swift 5 и SwiftUI
 Для SwiftUI создайте новый файл swift с именем HostingController.swift
import Foundation
import UIKit
import SwiftUI
class HostingController: UIHostingController<ContentView> {
    override var preferredStatusBarStyle: UIStatusBarStyle {
        return .lightContent
    }
}
 Затем измените следующие строки кода в SceneDelegate.swift
window.rootViewController = UIHostingController(rootView: ContentView())
в
window.rootViewController = HostingController(rootView: ContentView())
Ответ 2
В качестве альтернативы вы можете отключить внешний вид строки состояния на панели управления:
-  Установите View controller-based status bar appearanceвNOвInfo.plist.
-  Вызов [[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];
Примечание. Этот метод устарел в iOS9. Вместо этого используйте preferredStatusBarStyle на UIViewController. (см. Apple Developer Library)
Ответ 3
  Вы можете сделать это, не написав ни одной строки кода! 
Сделайте следующее, чтобы цвет текста в строке состояния был белым по всему приложению.
В файле проекта plist:
-  Стиль строки состояния: Transparent black style (alpha of 0.5)
-  Просмотр состояния строки состояния на основе контроллера: NO
-  Строка состояния изначально скрыта: NO
Ответ 4
Примечание. Большинство исправленных ответов не работают для iOS 7/8
В Info.plist установите "Просмотр строки состояния на основе контроллера" как NO
В AppDelegate добавьте
[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];
к
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions{
   ......
   ...
}    
Это решение работает для iOS 7/8
Ответ 5
Для меня ничего не случилось с использованием всех вещей в других ответах (и из других источников/документации). Что помогло установить стиль панели навигации "Черный" в XIB. Это изменило текст на белый без какого-либо кода.
 
Ответ 6
Ничего из этого не сработало для меня, так что вот рабочее решение...
В Info.plist добавьте строку:
 UIViewControllerBasedStatusBarAppearance и установите значение NO.
Затем в AppDelegate в didFinishLaunchingWithOptions добавьте следующие строки:
[application setStatusBarHidden:NO];
[application setStatusBarStyle:UIStatusBarStyleLightContent];
Ответ 7
Вам не нужно делать какой-либо код для этого
В info.plist вам нужно добавить "Просмотреть внешний вид строки состояния контроллера на основе контроллера": 
& установите для своего значения значение Boolean и значение NO. Затем щелкните по настройкам проекта, затем щелкните вкладку "Общие" и в разделе "Информация о развертывании" установите стиль предпочтительной строки состояния в .Light следующим образом:
Вот оно.
Ответ 8
Всего два шага:
Шаг 1:
На вкладке "Информация" project target "Добавить строку:
 UIViewControllerBasedStatusBarAppearance, установите значение NO.
Шаг 2:
В проекте AppDelegate.m:
- (BOOL)application:(UIApplication *)application 
        didFinishLaunchingWithOptions:(NSDictionary *)launchOptions{
    …
    [application setStatusBarStyle:UIStatusBarStyleLightContent];
    …
}
Ответ 9
Это работает в Golden Master iOS 7 и Xcode 5 семян GM и iOS7 SDK, выпущенных 18 сентября 2013 года (по крайней мере, с навигационным контроллером):
-  Установите the UIViewControllerBasedStatusBarAppearanceвNOвInfo.plist.
-  В методе ViewDidLoadили где угодно, где вы хотите изменить стиль строки состояния:[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];
Ответ 10
Если ваш UIViewController находится внутри UINavigationController, вам нужно будет установить BarStyle:
-[UINavigationBar setBarStyle:UIBarStyleBlack]
Оригинальный ответ здесь
Ответ 11
Если у вас встроенный контроллер навигации, созданный с помощью Interface Builder, не забудьте установить следующее в классе, управляющем вашим контроллером навигации:
-(UIStatusBarStyle)preferredStatusBarStyle{ 
    return UIStatusBarStyleLightContent; 
} 
Это должно быть все, что вам нужно.
Ответ 12
Я использую Xcode 6 beta 5 в проекте Swift для приложения iOS 7.
Вот что я сделал, и это работает:
info.plist:
 
Ответ 13
В AppDelegate.m добавьте следующее.
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions{
[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];
} 
И в файле Plist установите "Просмотр состояния панели управления на основе контроллера" на NO.
Ответ 14
Ну, это действительно работает как кусок пирога для меня.
Откройте приложение info.plist.
-  Установите View controller-based status bar appearanceвNO
-  Установите Status bar styleвUIStatusBarStyleLightContent
Затем перейдите к своему делегату приложения и вставьте следующий код, где вы устанавливаете свои окна RootViewController.
#define SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(v)  ([[[UIDevice currentDevice] systemVersion] compare:v options:NSNumericSearch] != NSOrderedAscending)
if (SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(@"7.0"))
{
    UIView *view=[[UIView alloc] initWithFrame:CGRectMake(0, 0,320, 20)];
    view.backgroundColor=[UIColor colorWithRed:0/255.0 green:0/255.0 blue:0/255.0 alpha:1.0];
    [self.window.rootViewController.view addSubview:view];
}
Бинго. Это работает для меня.
Ответ 15
Просто в Appdelegate
[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];
Ответ 16
Ответ 17
  В Swift 3 это очень просто, всего за 2 шага. Перейдите в ваш info.plist и измените ключ "
 В Swift 3 это очень просто, всего за 2 шага. Перейдите в ваш info.plist и измените ключ " View controller-based status bar appearance на "НЕТ". Затем в Appdelegate просто добавьте эту строку в метод didfinishlaunchingwithoptions
  func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
        // Override point for customization after application launch.
        UIApplication.shared.statusBarStyle = .lightContent
        return true
    }
это было объявлено устаревшим в iOS9, теперь вы должны переопределить это свойство в rootviewcontroller
делать это не рекомендуется в iOS 9 следует сделать это на rootviewcontroller
override var preferredStatusBarStyle: UIStatusBarStyle {
        return .lightContent
 }
Ответ 18
iOS 7 позволяет отдельным контроллерам просмотра определять внешний вид строки состояния, как описано в документации разработчика Apple:
iOS 7 дает контроллерам представлений возможность настраивать стиль строки состояния во время работы приложения. Хорошим способом динамического изменения стиля строки состояния является реализация
preferredStatusBarStyleи - внутри блока анимации - обновление внешнего вида строки состояния и вызовsetNeedsStatusBarAppearanceUpdate.
Настройка отображения строки состояния глобально - это двухэтапный процесс.
Во-первых, вам нужно сообщить iOS, что вы не хотите устанавливать отображение строки состояния в режиме просмотра.
Затем вам нужно взять на себя ответственность и установить новый глобальный стиль строки состояния.
Чтобы отключить контроль строки состояния просмотра, вам нужно установить свойство View controller-based status bar appearance в Info.plist.
Откройте "Навигатор проектов" и выберите проект для приложения iOS, затем выберите вкладку "Информация".
Наведите указатель мыши на строку, затем щелкните знак плюса, который добавит новое свойство в ваш .plist.
Введите View controller-based status bar appearance в поле Key, затем убедитесь, что для поля Type установлено значение Boolean. Наконец, введите NO в поле Value.
Чтобы установить глобальный стиль для строки состояния, добавьте другое свойство на вкладке "Информация" с помощью клавиши Status bar style, типа String и значения Opaque black style.
Здесь сообщение в блоге с немного более подробной информацией и некоторым примером кода:
http://codebleep.com/setting-the-status-bar-text-color-in-ios-7/
Ответ 19
Ответ обновлен для Xcode GM Seed:
-  В Info.plistпоместитеView controller-based status bar appearanceкакNO
-  В проекте задайте: ![Enter image description here]() 
-  В ViewDidLoad: [[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];
Ответ 20
Не нужно делать лишние, просто напишите этот код в своем viewController и получите цвет статуса белым цветом
- (UIStatusBarStyle)preferredStatusBarStyle{return UIStatusBarStyleLightContent;}
Ответ 21
Я думаю, что все ответы на самом деле не указывают на проблему, потому что все они работают в конкретных сценариях. Но если вам нужно покрыть все случаи, выполните следующие пункты:
В зависимости от того, где вам нужен стиль строки состояния, вы всегда должны иметь в виду эти 3 балла:
  1) Если вам нужна строка состояния на экране запуска или в других местах, где вы не можете управлять им (не на контроллерах, а на некоторых элементах/моментах, управляемых системой, таких как экран запуска)
Вы переходите к настройкам своего проекта

2), если у вас есть контроллер внутри контроллера навигации Вы можете изменить его в построителе интерфейса следующим образом:
a) Выберите навигационную панель вашего навигационного контроллера

b) Затем установите стиль панели навигации на "Черный", потому что это означает, что у вас будет "черный" → темный фон в строке состояния, поэтому он установит строку состояния в белый цвет
Или сделайте это в коде следующим образом
navigationController?.navigationBar.barStyle = UIBarStyle.Black
3) Если у вас есть только контроллер, который должен иметь собственный стиль строки состояния, и он не встроен в какую-либо структуру контейнера в качестве UINavigationController
Задайте стиль строки состояния в коде для контроллера:
Ответ 22
Просто позвонив
[[UINavigationBar appearance] setBarStyle:UIBarStyleBlack];
в
-(BOOL)application:(UIApplication *)application 
           didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
}
метод моего AppDelegate отлично работает для меня в iOS7.
Ответ 23
Это описано в Руководстве по переходу на iOS 7 UI, для которого вам необходим идентификатор разработчика Apple для прямого доступа. Соответствующая выдержка:
Поскольку строка состояния прозрачна, просмотр позади нее показывает. [...] Используйте константу
UIStatusBarStyle, чтобы указать, должно ли содержимое панели состояния быть темным или светлым:
UIStatusBarStyleDefaultотображает темное содержимое. [...]
UIStatusBarStyleLightContentотображает световой контент. Используйте, когда темное содержимое находится за панель состояния.
Также возможно интерес:
В iOS 7 вы можете управлять стилем строки состояния с отдельного контроллера vew и изменять его во время работы приложения. Чтобы принять участие в этом поведении, добавьте ключ
UIViewControllerBasedStatusBarAppearanceв файл приложенияInfo.plistи присвойте ему значениеYES.
Я определенно рекомендую просмотреть документ, который, опять же, вы можете получить с помощью идентификатора разработчика Apple.
Ответ 24
Если вы все еще хотите использовать View controller-based status bar appearance в инфо .plist, чтобы установить значение YES, это означает, что вы можете изменить строку состояния для каждого контроллера вида, используйте следующее для белого текста в строке состояния в ViewDidLoad:
[[[self navigationController] navigationBar] setBarStyle:UIBarStyleBlackTranslucent];
Ответ 25
Если вы хотите получить тот же результат с помощью Swift, вы можете использовать этот код в файле AppDelegate.swift:
UINavigationBar.appearance().barStyle = .BlackTranslucent
И текст вашей строки состояния будет белым:-)!
Ответ 26
Вот Apple Guidelines/Инструкция по изменению строки состояния. Только темные и светлые (в то время как и черные) разрешены в строке состояния.
Вот как изменить стиль строки состояния:
 Если вы хотите установить стиль строки состояния, уровень приложения, то установите для UIViewControllerBasedStatusBarAppearance значение NO в вашем файле .plist.
если вы хотите установить стиль строки состояния, на уровне контроллера представления выполните следующие действия:
-  Установите для UIViewControllerBasedStatusBarAppearanceзначениеYESв файле.plist, если вам нужно установить стиль строки состояния только на уровне UIViewController.
-  В viewDidLoad добавить функцию - setNeedsStatusBarAppearanceUpdate
-  переопределите предпочитаемый элемент StatusBarStyle в вашем контроллере представления. 
-
override func viewDidLoad() {
    super.viewDidLoad()
    self.setNeedsStatusBarAppearanceUpdate()
}
override var preferredStatusBarStyle: UIStatusBarStyle {
    return .lightContent
}
 Установите значение .plist в соответствии с уровнем настройки стиля строки состояния. 
 
 Вот несколько хитростей, чтобы изменить/установить цвет фона для строки состояния во время запуска приложения или во время viewDidLoad вашего контроллера представления.
extension UIApplication {
    var statusBarView: UIView? {
        return value(forKey: "statusBar") as? UIView
    }
}
// Set upon application launch, if you've application based status bar
class AppDelegate: UIResponder, UIApplicationDelegate {
    var window: UIWindow?
    func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
        UIApplication.shared.statusBarView?.backgroundColor = UIColor.red
        return true
    }
}
or 
// Set it from your view controller if you've view controller based statusbar
class ViewController: UIViewController {
    override func viewDidLoad() {
        super.viewDidLoad()
        UIApplication.shared.statusBarView?.backgroundColor = UIColor.red
    }
}
 
 Вот результат:
 
Ответ 27
Я сделал несколько вещей, и он работает для меня.
Без изменений в коде я установил свой файл .plist следующим образом:
- Просмотр состояния строки состояния на основе контроллерa > NO
- Стиль строки состояния > UIStatusBarStyleLightContent (простая строка)
Надеюсь, это поможет.
Изменить
Для каждого контроллера просмотра я изменяю свойство "Синтаксис метрики" в раскадровке "из строки" с "выводится" на "Легкий контент"
Ответ 28
В Plist добавьте это:
-  Стиль строки состояния: UIStatusBarStyleLightContent
-  Просмотр состояния строки состояния на основе контроллера: NO
Ответ 29
в файле info.plist установите значение поля NO Просмотрите внешний вид строки состояния на основе контроллера и установите статусбара стиль света в цели > общие настройки.
Ответ 30
Позвольте мне дать вам полный ответ на ваш вопрос. Изменение цвета текста в строке состояния очень просто, но его немного запутывает в iOS 7 специально для новичков.
Если вы пытаетесь изменить цвет с черного на белый в Storyboard, выбрав контроллер вида и перейдя на Simulated Metrics с правой стороны, это не сработает, и я не знаю, почему. Он должен работать, изменяясь таким образом, но любым способом.
Во-вторых, вы не найдете свойство UIViewControllerBasedStatusBarAppearance в своем plist, но по умолчанию его не существует. Вы должны добавить его самостоятельно, нажав на кнопку +, а затем установите значение НЕТ.
Цвет текста в строке состояния ios 7
Наконец, вам нужно перейти в файл AppDelegate.m и добавить следующее в метод didFinishLaunchingWithOptions, добавить следующую строку:
     [[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];
Это изменит цвет на белый для всех ваших контроллеров. Надеюсь, это поможет!





