Как изменить цвет текста строки состояния в iOS

У моего приложения темный фон, но в iOS 7 строка состояния стала прозрачной. Так что я ничего не вижу там, только зеленый индикатор батареи в углу. Как изменить цвет текста строки состояния на белый, как на домашнем экране?

60 ответов

Решение
  1. Установить UIViewControllerBasedStatusBarAppearance в YES в файле.plist.

  2. в viewDidLoad сделать [self setNeedsStatusBarAppearanceUpdate];

  3. Добавьте следующий метод:

    - (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
}

Кроме того, вы можете отказаться от внешнего вида строки состояния на основе контроллера вида:

  1. Задавать View controller-based status bar appearance в NO в вашем Info.plist,
  2. Вызов [[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];

Примечание. Этот метод устарел в iOS9. использование preferredStatusBarStyle вместо этого на UIViewController. (см. Apple Developer Library)

Вы можете сделать это без написания какой-либо строки кода!
Выполните следующие действия, чтобы сделать цвет текста строки состояния белым во всем приложении.

На вашем проекте plist файл:

  • Стиль строки состояния: Transparent black style (alpha of 0.5)
  • Просмотр внешнего вида строки состояния на основе контроллера: NO
  • Строка состояния изначально скрыта: NO

Примечание. Ответ с наибольшим количеством голосов не работает для iOS 7 / 8.

В Info.plist установите "Просмотр внешнего вида строки состояния на основе контроллера" как НЕТ

В AppDelegate добавить

[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];

в

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions{
   ......
   ...
}    

Это решение работает для iOS 7 / 8

Для меня ничего не произошло с использованием всех вещей в других ответах (и из других источников / документации). Что помогло, так это установило стиль панели навигации на "черный" в XIB. Это изменило текст на белый без какого-либо кода вообще.

Ничто из этого не сработало для меня, так что вот рабочее решение...

В Info.plistдобавьте строку:

UIViewControllerBasedStatusBarAppearanceи установите значение NO,

Затем в AppDelegate в didFinishLaunchingWithOptionsдобавьте эти строки:

[application setStatusBarHidden:NO];
[application setStatusBarStyle:UIStatusBarStyleLightContent];

Вам не нужно делать код для этого

Вам необходимо добавить ключ "Просмотр внешнего вида строки состояния на основе контроллера" в info.plist следующим образом: введите описание изображения здесь

& установить его тип значения на Boolean и значение на NO. Затем нажмите на настройки проекта, затем нажмите вкладку "Общие" и в разделе "Информация о развертывании" установите предпочтительный стиль строки состояния на.Light следующим образом:

введите описание изображения здесь

Это оно.

Всего два шага, как показано ниже:

Шаг 1:

На вкладке Информация project target, Добавить ряд:

UIViewControllerBasedStatusBarAppearanceустановить значение NO,

Шаг 2:

В проекте AppDelegate.m:

- (BOOL)application:(UIApplication *)application 
        didFinishLaunchingWithOptions:(NSDictionary *)launchOptions{
    …
    [application setStatusBarStyle:UIStatusBarStyleLightContent];
    …
}

Это работает в Golden Master iOS 7 и Xcode 5 GM seed и iOS7 SDK, выпущенных 18 сентября 2013 года (по крайней мере, со скрытым контроллером навигации):

  1. Задавать the UIViewControllerBasedStatusBarAppearance в NO вInfo.plist,

  2. В ViewDidLoad метод или в любом месте, где вы хотите изменить стиль строки состояния: [[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];

Если ваш UIViewController находится внутри UINavigationController, вам нужно установить BarStyle:

-[UINavigationBar setBarStyle:UIBarStyleBlack]

Оригинальный ответ здесь

https://devforums.apple.com/message/844264

Если у вас есть встроенный контроллер навигации, созданный с помощью Interface Builder, обязательно установите следующее в классе, который управляет вашим контроллером навигации:

-(UIStatusBarStyle)preferredStatusBarStyle{ 
    return UIStatusBarStyleLightContent; 
} 

Это должно быть все, что вам нужно.

Я использую Xcode 6 beta 5 в проекте Swift для приложения iOS 7.

Вот что я сделал, и это работает:

info.plist:

  1. Идти к Project -> Target,

  2. Затем установите Status Bar Style в Light, Строка состояния становится белой на экране запуска. Настройка проекта

  3. Затем установите View controller-based status bar appearance равно NO в Info.plist,

Изменение в информации 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
    }

Просто в приложении

[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];

В AppDelegate.m добавьте следующее.

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions{

[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];

} 

А в файле Plist установите для параметра "Просмотр внешнего вида строки состояния на основе контроллера" значение NO.

Кажется, что Xcode постоянно меняет это, так что это последняя версия.

По состоянию на 2021 год - Swift 5, Xcode 12

Чтобы изменить цвет строки состояния на белый:

  1. Откройте свой Info.plist .
  2. Добавить ключ UIViewControllerBasedStatusBarAppearance и установите значение на No (ложный).
  3. Добавить ключ UIStatusBarStyle и установите значение на UIStatusBarStyleLightContent (т.е. легкое содержание).

Ну, это действительно работает как кусок пирога для меня.

Перейти к вашему приложению info.plist,

  1. Задавать View controller-based status bar appearance в NO
  2. Задавать 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];
}

Бинго. Это работает для меня.

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 в поле Значение.

Чтобы установить глобальный стиль для строки состояния, добавьте другое свойство на вкладке "Информация" с ключом Status bar style, тип String и значение Opaque black style,

Вот сообщение в блоге с более подробной информацией и некоторым примером кода:

http://codebleep.com/setting-the-status-bar-text-color-in-ios-7/

Обновлен ответ для Xcode GM Seed:

  1. В Info.plist положил View controller-based status bar appearance как NO

  2. В проекте установите:

  3. В ViewDidLoad:

    [[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];

Это задокументировано в Руководстве по переходу пользовательского интерфейса iOS 7, к которому вам нужен идентификатор разработчика Apple для прямого доступа. Соответствующая выдержка:

Поскольку строка состояния прозрачна, вид позади нее просвечивает. [...] Использовать UIStatusBarStyle константа, указывающая, должно ли содержимое строки состояния быть темным или светлым:

UIStatusBarStyleDefault отображает темный контент. [...]

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

Также возможно представляет интерес:

В iOS 7 вы можете контролировать стиль строки состояния с отдельного контроллера vew и изменять его во время работы приложения. Чтобы включить это поведение, добавьте UIViewControllerBasedStatusBarAppearance ключ к приложению Info.plist файл и дать ему значение YES,

Я бы определенно рекомендовал ознакомиться с документом, к которому, опять же, вы можете получить доступ с помощью своего идентификатора разработчика Apple.

Не нужно делать ничего лишнего, просто напишите этот код в вашем viewController и получите строку состояния белого цвета.

- (UIStatusBarStyle)preferredStatusBarStyle{return UIStatusBarStyleLightContent;}

Я думаю, что все ответы на самом деле не указывают на проблему, потому что все они работают в определенных сценариях. Но если вам нужно охватить все случаи, следуйте пунктам ниже:

В зависимости от того, где вам нужен стиль освещения в строке состояния, вы всегда должны иметь в виду следующие 3 момента:

1) Если вам нужна строка состояния на экране запуска или в других местах, где вы не можете ее контролировать (не в контроллерах представления, а в некоторых контролируемых системой элементах / моментах, таких как Launch Screen), вы переходите к настройкам своего проекта Настройки проекта

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

а) Выберите панель навигации вашего контроллера навигации Выберите панель навигации вашего контроллера навигации

б) Затем установите стиль панели навигации на "Черный", потому что это означает, что у вас будет "черный" -> темный фон под строкой состояния, поэтому он установит строку состояния на белый

Или сделать это в коде следующим образом

navigationController?.navigationBar.barStyle = UIBarStyle.Black

3) Если у вас есть только один контроллер, который должен иметь свой собственный стиль строки состояния, и он не встроен в какую-либо структуру контейнера как UINavigationController

Установите стиль строки состояния в коде для контроллера:

Установка стиля строки состояния в коде

Вот Apple Guidelines/ Инструкция по изменению строки состояния. Только темные и светлые (в то время как и черные) разрешены в строке состояния.

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

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

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

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

  3. переопределить предпочитаемый 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
    }

}



Вот результат:

Просто звоню

[[UINavigationBar appearance] setBarStyle:UIBarStyleBlack];

в

-(BOOL)application:(UIApplication *)application 
           didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
}

метод моего AppDelegate отлично работает для меня в iOS7.

В моем случае для Swift 5 я добавил следующие строки:

override func viewDidAppear(_ animated: Bool) {
    navigationController?.navigationBar.barStyle = .black
}

override var preferredStatusBarStyle: UIStatusBarStyle {
    return .lightContent
}

Я сделал некоторые вещи по-другому, и это работает для меня.

Без изменений в коде я настроил свой файл.plist следующим образом:

  • Просмотреть внешний вид строки состояния на основе контроллера> НЕТ
  • Стиль строки состояния> UIStatusBarStyleLightContent (простая строка)

Я надеюсь, что это помогает.

редактировать

Для каждого контроллера представления я изменяю свойство Simulated Metrics "строки состояния" в раскадровке с "выведенного" на "Легкое содержимое"

В info.plist установите значение поля NO. Просмотрите внешний вид строки состояния на основе контроллера и установите индикатор стиля строки состояния в target > general setting.

Просто подведите итог, отредактируйте свой проект Info.plist и добавить:

View controller-based status bar appearance: NO

Status bar style: Opaque black style

или если у вас есть необработанный ключ / значение plist

UIViewControllerBasedStatusBarAppearance: NO

UIStatusBarStyle: Opaque black style

Если вы хотите получить тот же результат со Swift, вы можете использовать этот код в вашем файле AppDelegate.swift:

UINavigationBar.appearance().barStyle = .BlackTranslucent

И текст вашей строки состояния будет белым:-)!

Другие вопросы по тегам