it-swarm.com.ru

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

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

956
Oleksandr Veremchuk
  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
}
1335
Peter B. Kramer

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

  1. Установите View controller-based status bar appearance на NO в вашем Info.plist.
  2. Позвоните [[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];

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

843
wilsontgh

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

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

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

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

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

В AppDelegate добавить

[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];

в

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

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

240
Pradeep Mahdevu

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

Enter image description here

110
haraldmartin

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

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

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

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

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

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

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

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

enter image description here

Это оно.

60
Ajinkya Patil

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

Шаг 1:

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

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

Шаг 2:

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

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

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

  1. Установите the UIViewControllerBasedStatusBarAppearance в NO в Info.plist.

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

43
Deniss Fedotovs

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

-[UINavigationBar setBarStyle:UIBarStyleBlack]

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

https://devforums.Apple.com/message/844264#844264

32
Mohit Padalia

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

-(UIStatusBarStyle)preferredStatusBarStyle{ 
    return UIStatusBarStyleLightContent; 
} 

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

29
matt bernardo

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

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

info.plist:

Enter image description here

27
fancoolo

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

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

[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];

} 

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

22
neo D1
  1. Перейдите к Project -> Target,

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

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

20
Wanbok Choi

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

Перейдите к 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];
}

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

20
Shahid Iqbal

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

[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];
20
Vivek Sehrawat

Change in 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
 }
17
James Rochabrun

iOS 7 позволяет отдельным контроллерам представления определять внешний вид строки состояния, как описано в документации для разработчиков Apple:

iOS 7 предоставляет контроллерам представления возможность настраивать стиль строки состояния во время работы приложения. Хороший способ динамического изменения стиля строки состояния - реализовать preferredStatusBarStyle и - внутри блока анимации - обновить внешний вид строки состояния и вызвать setNeedsStatusBarAppearanceUpdate.

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

Во-первых, вы должны сказать iOS, что не хотите устанавливать внешний вид строки состояния для каждого отдельного просмотра.

Затем вам нужно взять на себя ответственность и фактически установить новый глобальный стиль строки состояния.

Чтобы отключить контроль строки состояния просмотра за просмотром, вам нужно установить свойство View controller-based status bar appearance в Info.plist.

Откройте Навигатор проектов и выберите проект для своего приложения iOS, затем выберите вкладку "Информация".

Наведите указатель мыши на строку, затем щелкните значок плюса, который появляется, чтобы добавить новое свойство в свой .plist.

Введите View controller-based status bar appearance в поле Ключ, затем убедитесь, что в поле Тип установлено значение Boolean. Наконец, введите NO в поле Значение.

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

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

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

17
Josh Earl

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

- (UIStatusBarStyle)preferredStatusBarStyle{return UIStatusBarStyleLightContent;}
12
Mohit tomar

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

  1. В Info.plist укажите View controller-based status bar appearance как NO

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

    Enter image description here

  3. В ViewDidLoad:

    [[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];

12
parilogic

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

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

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

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

а) Выберите панель навигации вашего контроллера навигации Select the navigation bar of your navigation controller

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

enter image description here

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

navigationController?.navigationBar.barStyle = UIBarStyle.Black

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

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

Setting the status bar style in code

11
Fawkes

Просто звоню

[[UINavigationBar appearance] setBarStyle:UIBarStyleBlack];

в

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

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

10
Cagdas Altinkaya

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

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

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

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

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

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

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

9
Aaron Miller

Вот Apple Guidelines/Instruction об изменении строки состояния. Только темные и светлые (в то время как и черные) разрешены в строке состояния.

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

Если вы хотите установить стиль строки состояния, уровень приложения, то установите 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 в соответствии с уровнем настройки стиля строки состояния. enter image description here


Вот несколько хитростей, чтобы изменить/установить цвет фона для строки состояния во время запуска приложения или во время 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
    }

}



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

enter image description here

8
Krunal

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

UINavigationBar.appearance().barStyle = .BlackTranslucent

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

8
fraxool

Если вы все еще хотите использовать View controller-based status bar appearance в info.plist, установленном в YES, то есть вы можете изменить строку состояния для каждого контроллера представления, используйте следующее для белого текста в строке состояния в ViewDidLoad:

[[[self navigationController] navigationBar] setBarStyle:UIBarStyleBlackTranslucent];
8
eirik

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

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

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

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

Правка

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

7
Felipe Antonio Cardoso

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

7
parvind

Позвольте мне дать вам полный ответ на ваш вопрос. Изменить цвет текста в строке состояния очень просто, но это немного запутанно в iOS 7, особенно для новичков.

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

Во-вторых, вы не найдете свойство UIViewControllerBasedStatusBarAppearance в вашем списке, но по умолчанию его там нет. Вы должны добавить его самостоятельно, нажав на кнопку +, а затем установите его на NO.

цвет текста в строке состояния ios 7

Наконец, вам нужно перейти к файлу AppDelegate.m и добавить следующее в метод didFinishLaunchingWithOptions, добавив следующую строку:

     [[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];

Это изменит цвет на белый для всех ваших контроллеров представления. Надеюсь это поможет!

7
Amit Shelgaonkar

В Plist добавьте это:

  • Стиль строки состояния: UIStatusBarStyleLightContent
  • Просмотр внешнего вида строки состояния на основе контроллера: NO
7
Ramdhas

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

View controller-based status bar appearance: NO

Status bar style: Opaque black style

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

UIViewControllerBasedStatusBarAppearance: NO

UIStatusBarStyle: Opaque black style

6
budidino

Ключом к выполнению этой работы является то, что только полноэкранный режим просмотра контролирует стиль строки состояния.

Если вы используете контроллер навигации и хотите управлять строкой состояния для каждого контроллера представления, вы захотите создать подкласс UINavigationController и внедрить предпочитаемый класс StatusBarStyle таким образом, чтобы он возвращал предпочтение topViewController.

Убедитесь, что вы изменили ссылку на класс в сцене раскадровки с UINavigationController на свой подкласс (например, MyNavigationController в приведенном ниже примере).

(Следующее работает для меня. Если ваше приложение основано на TabBar, вы захотите сделать нечто подобное, создав подкласс UITabBarController, но я не пробовал это делать).

@interface MyNavigationController : UINavigationController

@end

@implementation MyNavigationController

- (UIStatusBarStyle)preferredStatusBarStyle
{
    return self.topViewController.preferredStatusBarStyle;
}

@end
6
Juddster

Для Xcode 5.1:

Добавить " Просмотр внешнего вида строки состояния на основе контроллера " в НЕТ в .plist.

В AppDelegate добавьте:

[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];

Это все!

5
Marcelo dos Santos

Вы можете сделать это из info.plist:

1) "Просмотр внешнего вида строки состояния на основе контроллера" установлен на "НЕТ"

2) "Стиль строки состояния" установлен в "UIStatusBarStyleLightContent"

сделанный

4
Dima Deplov

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

В AppDelegate добавить

[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];
4
Patel Jigar

Swift 3 - Xcode 8.

Если вы хотите, чтобы строка состояния изначально скрыта на экране запуска, попробуйте это,

Шаг 1: Добавить следующее к info.plist.

  • View controller-based status bar appearance value NO
  • Status bar is initially hidden value YES

Шаг 2: Запишите это в методе didFinishLaunchingWithOptions.

UIApplication.shared.isStatusBarHidden = false
UIApplication.shared.statusBarStyle = UIStatusBarStyle.lightContent
3
Zaid Pathan

Если ваше приложение должно иметь UIStatusBarStyleLightContent по умолчанию, но вы все еще хотите иметь возможность использовать UIStatusBarStyleDefault на некоторых экранах, вы можете выбрать управление цветом строки состояния на уровне контроллера, но в этом случае вам придется перезаписать preferredStatusBarStyle в каждом контроллере представления (или реализовать его в базовом контроллере представления, от которого наследуются все остальные контроллеры представления). Вот еще один способ решения этой проблемы:

  • Установите UIViewControllerBasedStatusBarAppearance в NO в списке
  • Установите UIStatusBarStyle в UIStatusBarStyleLightContent

Все контроллеры представления будут использовать белый текст для строки состояния. Теперь добавьте эти методы только в контроллеры представления, которым требуется строка состояния с черным текстом:

-(void)viewWillAppear:(BOOL)animated  
{  
  [super viewWillAppear:animated];  
  [[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleDefault];
}    

-(void)viewWillDisappear:(BOOL)animated  
{  
  [super viewWillAppear:animated];  
  [[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];
}    
3
Konstantin Kalbazov

Самый простой способ сделать это из Xcode (без какой-либо кодировки):

  • Добавьте View controller-based status bar appearance в ваш Info.plist и установите значение NO.
  • Теперь перейдите к цели вашего проекта и внутри Deployment Info вы найдете опцию для Status Bar Style. Установите значение этой опции равным Light.

У вас будет строка состояния White.

3
Mahendra Liya

Я делаю это в iOS 9 и Swift 2.0, если я использую UINavigationController

self.navigationController?.navigationBar.barStyle = UIBarStyle.Black

И я делаю это, если я использую модальный Segue

override func preferredStatusBarStyle() -> UIStatusBarStyle {
    return .LightContent
}
3
Alexander Khitev

В iOS 8: добавьте NavigationController.NavigationBar.BarStyle = UIBarStyle.Black; к viewDidLoad

3
S. Matsepura
  • Удалите Просмотр внешнего вида строки состояния на основе контроллера в файле .plist (если у вас есть create) и создайте его заново.

  • установить стиль строки состояния в непрозрачный черный стиль

В appDelegate добавьте следующий код в didFinishLaunching.

 [[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];
2
VarshaSai

Это похоже на проблему с текущей сборкой Xcode и iOS 7.

Некоторый связанный контент на форумах разработчиков Apple находится в поиск UIStatusBarStyleLightContent в разделе "iOS 7 Beta Livability" на Apple форумах разработчиков * (в настоящее время 32 сообщения).

Я наткнулся на это, пытаясь установить его на облегченную версию.

(Это просто продолжение ответа Аарона.)

2
AlastairDewar

Это сработало для меня:

  1. Установите UIViewControllerBasedStatusBarAppearance в YES в plist

  2. rootViewController нуждается в реализации метода для

    -(UIStatusBarStyle)preferredStatusBarStyle
    

Поскольку моим rootViewController управляет Cocoapods (JASidePanelController), я добавил этот метод через категорию:

#import "JASidePanelController+StatusBarStyle.h"

@implementation JASidePanelController (StatusBarStyle)

- (UIStatusBarStyle)preferredStatusBarStyle
{
    return UIStatusBarStyleLightContent;
}

@end
2
Paul

Просто измените 1)Info.plist Просмотрите строку состояния на основе контроллера appearance -> NO и напишите 2)

  [[UIApplication
 sharedApplication]setStatusBarStyle:UIStatusBarStyleLightContent]; 

в

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
2
IOS developer

изменить цвет текста строки состояния для всех ViewControllers

Swift

если Просмотр строки состояния на основе контроллера = ДА в Info.plist

затем используйте это расширение для всех NavigationController

extension UINavigationController
{
    override open var preferredStatusBarStyle: UIStatusBarStyle {
    return .lightContent
     }
 }

если UINavigationController отсутствует и имеется только UIViewController, используйте код ниже:

extension UIViewController
{
    override open var preferredStatusBarStyle: UIStatusBarStyle {
    return .lightContent
     }
 }

Цель C

создать класс категории

для UIViewController

В UIViewController + StatusBarStyle.h

 @interface UIViewController (StatusBarStyle)
 @end

В UIViewController + StatusBarStyle.m

 #import "UIViewController+StatusBarStyle.h"

 @implementation UIViewController (StatusBarStyle)
 -(UIStatusBarStyle)preferredStatusBarStyle
 {
  return UIStatusBarStyleLightContent;
 }
 @end 

для UINavigationController

В UINavigationController + StatusBarStyle.h

 @interface UINavigationController (StatusBarStyle)
 @end

В UINavigationController + StatusBarStyle.m

 #import "UINavigationController+StatusBarStyle.h"

 @implementation UINavigationController (StatusBarStyle)
 -(UIStatusBarStyle)preferredStatusBarStyle
 {
  return UIStatusBarStyleLightContent;
 }
 @end  
2
Datt Patel

Вы можете использовать это для iOS 6 и 7:

#ifdef __IPHONE_7_0
# define STATUS_STYLE UIStatusBarStyleLightContent
#else
# define STATUS_STYLE UIStatusBarStyleBlackTranslucent
#endif

[[UIApplication sharedApplication] setStatusBarStyle:STATUS_STYLE animated:YES];
1
Arash Zeinoddini

В iOS 7, если вы хотите использовать UIViewControllerBasedStatusBarAppearance == YES, а вашим корневым контроллером представления является UINavigationController, вы должны создать его подкласс и перегрузить childViewControllerForStatusBarStyle, например, так:

- (UIViewController*) childViewControllerForStatusBarStyle
{
    return self.viewControllers.lastObject;
}

После этого предпочитаемый элемент StatusBarStyle будет вызываться на контроллерах с принудительным представлением.

1
poGUIst

Пожалуйста, попробуйте это

[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];
    [application setStatusBarHidden:NO];
    [[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];
    UIView *statusBar = [[[UIApplication sharedApplication] valueForKey:@"statusBarWindow"] valueForKey:@"statusBar"];
    if ([statusBar respondsToSelector:@selector(setBackgroundColor:)]) {
        statusBar.backgroundColor = [UIColor blackColor];
    }
1
Karthickkck

Что я должен был сделать для Swift и ​​контроллера навигации

extension UINavigationController {
    override open var preferredStatusBarStyle: UIStatusBarStyle {
       return .lightContent
    }   
}
0
Cmar

Если вы хотите установить любой цвет, используйте код ниже.

id statusBarWindow = [[UIApplication sharedApplication] valueForKey:@"statusBarWindow"];
id statusBar = [statusBarWindow valueForKey:@"statusBar"];

SEL setForegroundColor_sel = NSSelectorFromString(@"setForegroundColor:");
if([statusBar respondsToSelector:setForegroundColor_sel]) {
    // iOS 7+
    [statusBar performSelector:setForegroundColor_sel withObject:YourColorHere];
                                                                 ^^^^^^^^^^^^^
}

Я знаю, что у меня есть доступ к частному API, но я использовал это во многих проектах и ​​Apple одобрил его.

Просто при отправке приложения отправьте этот код Apple в разделе комментариев и сообщите, что вы используете этот код для изменения цвета строки состояния.

И да , и ниже не забудьте.

0
Fahim Parkar